socket客户端的心跳数据处理问题

dreamboycx

现在我用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);只要这句话也不行,想不明白,不知道为什么?请老大指点迷津。。。

3468 1 0
1个回答

walkor 打赏

socket_read后判断下
是否读到了自己要的数据,如果读到了就断开。
没读到就while循环读。

  • 暂无评论
年代过于久远,无法发表回答
×
🔝