public function __construct() {
if (!$this->Listen()) {
throw new Exception;
}
while (1) {
$read = $this->master;
$mod_fd = stream_select($read, $w = null, $e = null, 5, 00);
if ($mod_fd === FALSE) {
throw new Exception;
}
foreach ($read as $feed => $stream) {
if ($stream === $this->master['main']) {
$conn = stream_socket_accept($this->master['main']);
$this->master[count($this->master)] = $conn;
} else {
$this->ReadStream($feed, $stream);
}
}
}
}
private function Listen() {
$socket = stream_socket_server("tcp://0.0.0.0:6001", $errno, $errstr);
if ($errstr != '') {
return false;
}
$this->master['main'] = $socket;
return true;
}
我的理解是,stream_select
会将$read
填入有可供阅读的数据流。
我的目的是一个接一个地读取$read
中的每个流,但ReadStream
内部发生了一些非常糟糕的事情,有时数据似乎来自不同于我预期的流。< / p>
在我有机会循环之前,$read
可能正在修改stream_select
?但我认为这个过程中的每一个都是异步发生的,所以现在我完全糊涂了
答案 0 :(得分:1)
您正在创建套接字,因此您需要使用socket_select
,而不是stream_select
。后者用于文件流。
您需要致电socket_read
以获取相关数据。
PHP手册在评论部分有一些创建示例。