php stream_socket_accept 怎么设置成非阻塞模式??

如下代码,但即使设置了 stream_socket_blocking($res , false) 也没用啊!

$stream = stream_socket_server('tcp://0.0.0.0:9160' , $errno , $errstr);

// 设置为非阻塞模式
stream_set_blocking($stream , false);

$client = stream_socket_accept($stream);

echo '实现 stream_socket_accept 非阻塞' . PHP_EOL;

怎么实现 stream_socket_accept 非阻塞??

阅读 5.8k
2 个回答

同看到此问题。相关的资料是在太少了。
stream_set_blocking应该是只影响读写相关函数,对stream_socket_accept是不起作用的。
比较好的处理方法应该还是用stream_select类似相关的IO多路复用函数通知,然后stream_socket_accept($stream,0);第二个参数设置为0来读取,不加循环简单的示例类似:

$stream = stream_socket_server('tcp://0.0.0.0:9160' , $errno , $errstr);
$read = [$stream];
$write = null;
$except = null;
$result = stream_select($read, $write, $except, null);
if ($result > 0) {
    $conn = stream_socket_accept($stream, 0);
    var_dump($conn);
}
stream_set_blocking($stream , 0);

这表示字节流以非阻塞模式进行读写。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题