我正在使用stream_select(),但几秒钟后它返回0个描述符,而我的函数仍然有数据要读取。
但一个不寻常的事情是,如果您将超时设置为 0,那么我总是得到描述符的数量为零。
$num = stream_select($read, $w, $e, 0);
Stream_select() 必须在循环中使用
The 流选择() http://php.net/manual/en/function.stream-select.php功能基本上只是polls您在前三个参数中提供的流选择器,这意味着它将等待直到发生以下事件之一:
- 一些数据到达
- 或达到超时(用 $tv_sec 和 $tv_usec 设置)而没有获取任何数据。
So 接收0作为返回值完全正常,表示当前轮询周期内没有新数据。
我建议将该函数放入一个循环中,如下所示:
$EOF = false;
do {
$tmp = null;
$ready = stream_select($read, $write, $excl, 0, 50000);
if ($ready === false ) {
// something went wrong!!
break;
} elseif ($ready > 0) {
foreach($read as $r) {
$tmp .= stream_get_contents($r);
if (feof($r)) $EOF = true;
}
if (!empty($tmp)) {
//
// DO SOMETHING WITH DATA
//
continue;
}
} else {
// No data in the current cycle
}
} while(!$EOF);
请注意,在这个示例中,脚本完全忽略了输入流之外的所有内容。此外,“if”语句的第三部分是完全可选的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)