我正在以这种方式创建套接字:
$fp = fsockopen("tcp://".$ip, $port, $errno, $errstr);
stream_set_timeout($fp, 1); // timeout is one second
stream_set_blocking($fp, 1); // block until data is available
然而,当我读到时,即使在读取数据后,我总是会超时:
while(true) {
$result = fgets($fp, 4096);
if(empty($result)) {
break;
}
else {
echo $result;
}
}
我认为我的阅读方法是错误的,因为我不完全理解php套接字在后台如何工作。我的意图是阅读,直到没有更多数据,或者如果我试图读取数据一段时间但没有数据可用,我就会放弃。
在各种PHP套接字示例中,我已经看到使用一段时间(!feof($ fp))来停止读取循环,但就我而言,另一端永远不会发送eof标记。他们只发送换行符分隔的消息。
有什么想法吗?
感谢。