2

作成者がセットアップSSE/EventSourceし、サーバーでPHPスクリプトがデータをエコーアウトして呼び出しob_flush()flush()データをクライアントブラウザーに送り返すチュートリアルをネットで見たことがあります。これは正常に機能し、新しいデータが 3 秒ごとにクライアントにプッシュされます。

しかし、これは SSE の使い方が間違っているというコメントも読みました。この人は、SSE の要点は、サーバーが接続を維持することであり、上記の方法を使用して新しいデータがクライアントにプッシュされる理由は、EventSource がサーバーの切断を認識するためであると述べました。この人は、サーバーはループを使用し、スリープを使用して数秒ごとにデータをプッシュする必要があると述べました。

それで、これは事実ですか?サーバーにループを設けてデータをプッシュし、プッシュのペースを調整することで、SSE を実装する必要がありますか?sleep()

4

1 に答える 1

2

唯一の方法であるかどうかを言うほどPHPについてはよくわかりませんがsleep()、サーバー側のポイントは、新しい接続を開かずにいつでも新しいデータをクライアントに送信できるように、接続を開いたままにすることです。

これにはいくつかのしわがあります。SSE は従来の共有 Web ホスティングで動作するように設計されているため、ある時点でサーバー側でタイムアウトが発生することが予想されます (PHP では、max_execution_timeおよび/またはに応じて 30 秒または 60 秒set_time_limit()。これが 2 番目の問題につながります。サーバーは定期的に切断されることが期待されますブラウザは自動的に接続を再確立することが期待されます.これは、あなたが言及したブログ投稿に見られる動作を説明しています.

とにかく毎秒データを送信しているだけのように、リアルタイムのsleep()側面の一部が失われると思いますが、AJAXポーリングを使用することもできますが、ループ/スリープアプローチよりもPHPで良い方法はありません。また、SSE に PHP を使用している場合、セッション オブジェクトはシングル スレッドであるため、SSE ページで開いたままにしておくと、アクセスが必要な他のスクリプト (AJAX リクエストなど) がブロックされることに注意してください。

于 2013-01-01T19:14:37.550 に答える