我正在学习 PHP 中的套接字编程,所以我正在尝试一个简单的 echo-chat 服务器。
我写了一个服务器,它可以工作。我可以将两个 netcat 连接到它,当我在一个 netcat 中写入时,我会在另一个 netcat 中接收它。现在,我想实现 NC 在 PHP 中所做的事情
我想使用 stream_select 来查看我是否在 STDIN 或套接字上有数据,以便将消息从 STDIN 发送到服务器或从服务器读取传入消息。不幸的是,php手册中的示例并没有给我任何线索。我试图简单地 $line = fgets(STDIN) 和 socket_write($socket, $line) 但它不起作用。所以我开始下降,只是希望 stream_select 在用户输入消息时起作用。
$read = array(STDIN);
$write = NULL;
$exept = NULL;
while(1){
if(stream_select($read, $write, $exept, 0) > 0)
echo 'read';
}
给
PHP 警告:stream_select():第 18 行的 /home/user/client.php 中没有传递流数组
但是当我 var_dump($read) 它告诉我,它是一个带有流的数组。
array(1) {
[0]=>
resource(1) of type (stream)
}
如何让 stream_select 工作?
PS:在Python中我可以做类似的事情
r,w,e = select.select([sys.stdin, sock.fd], [],[])
for input in r:
if input == sys.stdin:
#having input on stdin, we can read it now
if input == sock.fd
#there is input on socket, lets read it
我在 PHP 中也需要同样的东西