3

クライアントに書き込もうとすると、メッセージがバッファリングされ、場合によってはまったく書き込まれません。

現在の状況:
サーバーに 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();

概要:
閉じる前にクライアントに何も書き込まれないのはなぜですか?

4

1 に答える 1