PHPでソケットプログラミングを学んでいるので、単純なエコーチャットサーバーを試しています。
サーバーを作成しましたが、動作します。2 つの 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でも同じことが必要です