现在我用workerman搭建了一个socket服务端,client.php客户端作为微信公众号的地址,现在服务端有个心跳检测,数据是{"type":"ping"},我建立了长连接后接收服务端的socket数据,我这样写的:
$in = '{"type":"test"}';
$out = '';
if(!socket_write($socket, $in, strlen($in))) {
$errStr = "socket_write() failed: reason: " . socket_strerror($socket);
echo http_text($FromUserName,$ToUserName,$errStr);exit;
}
$infoStr = '';
while($out = socket_read($socket, 8192)) {
$infoStr = "接收服务器回传信息成功!\n";
$infoStr .= "接受的内容为:".$out;
}
echo http_text($FromUserName,$ToUserName,$infoStr);//回复微信消息
socket_close($socket);
在while循环那里一直接收心跳数据,下面的回复微信公从号的信息无法执行,导致公众号无法服务,怎么能避免接收心跳数据呢?不限入死循环,我把while循环去掉了,直接用$out = socket_read($socket, 8192);只要这句话也不行,想不明白,不知道为什么?请老大指点迷津。。。
socket_read后判断下
是否读到了自己要的数据,如果读到了就断开。
没读到就while循环读。