PHP 中的stream_select() 问题

2024-01-14

我正在使用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(使用前将#替换为@)

PHP 中的stream_select() 问题 的相关文章

随机推荐