クライアントに書き込もうとすると、メッセージがバッファリングされ、場合によってはまったく書き込まれません。
現在の状況:
サーバーに telnet で接続すると、Server Ready:
メッセージは期待どおりにすぐに出力されます。
ランダムなデータ (「クローズ」以外) を送信すると、サーバーの端末は毎秒適切に進行状況を表示しますが、クライアントの出力はすべてのスリープが終わるまで待機し、一度にすべて出力します。
最も重要なことは、「close」を送信するときに、必須の秒だけ待機し、クライアントで書き込みを行わずに閉じることです。
目標:
私の主な目標は、接続を閉じる前にクライアントに簡単なメッセージを書き込むことです。
コード:
// server.php
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$socket->on('connection', function ($conn)
{
$conn->write("Server ready:\n");
$conn->on('data', function ($data) use ($conn)
{
$data = trim($data);
if( $data == 'close')
{
$conn->write("Bye\n");
sleep(1);
$conn->close();
}
for ($i = 1; $i<5; $i++) {
$conn->write(". ");
echo '. ';
sleep(1);
}
$conn->write(".\n");
echo ".\n";
$conn->write("You said \"".$data."\"\n");
});
});
$socket->listen(1337, '127.0.0.1');
$loop->run();
概要:
閉じる前にクライアントに何も書き込まれないのはなぜですか?