2

私は、継続的な ajax ポーリングを回避しようとして、2 番目に更新される「オンライン ユーザー」カウンターを表示する最良の方法についていくつかの調査を行ってきました。

明らかに、WebSockets が最良の選択肢のようです。これはイントラネットなので、互換性の問題がないように、Chrome または Safari を使用する必要があります。

私は WebSockets に慣れていないので、WebSockets に関するいくつかの記事を読んでいて、それがどのように機能するかをかなり理解していると思います。

私がよくわからないのは、PHPでそれを実装する方法です。Node.js は「常に実行されている」という性質があるため、これには自然な選択のように見えますが、それはオプションではありません。

私が最も混乱しているのは、PHP が実行され、完了すると終了するという事実です。PHP が終了した場合、ソケット接続は失われませんか? または、php が再実行された場合、IP でユーザーを調べますか? (その可能性は低いと思います)

次に、このライブラリ http://code.google.com/p/phpwebsocket/を見つけまし たが、少し古いようです (Chrome nightly のみが WebSocket と互換性があると記載されています)。

ある時点で、「コマンドラインから、server.php プログラムを実行してソケット接続をリッスンします」と書かれています。つまり、多くの共有ホスティング プランにはない SSH が必要です。

そして、私のもう1つの疑問は、そのライブラリのソースにある次の行です。

 set_time_limit(0);

それはphpファイルが継続的に実行されるということですか?それは共有ホスティングで許可されていますか? 私が知っていることから、すべてのホスティングは 1 o2 分のタイムアウト後に php を強制終了します。

オンライン ユーザーの mysql テーブルがあり、PHP を使用して、ログインしているユーザーの数をそれらのオンライン ユーザーに Websocket 経由でブロードキャストしたいと考えています。誰かが私を助けてくれるか、これを達成するためのより良い情報をどこかに教えてもらえますか?

ありがとう

4

1 に答える 1

2

Websocket は、共有ホスティングは別として、専用ホスティングでも多くのことを必要とします。

サーバーのみがデータをクライアントにプッシュするため、要件サーバー送信イベント (sse) は正しい選択です。

SSE は、ajax と非常によく似た単純なサーバー スクリプトを呼び出すことができますが、クライアント側は、データが入ってくると、部分ごとにデータを受け取り、処理することができます。何らかのデータが入ってくるたびに、Dom イベントが生成されます。

ただし、IE はバージョン 10 でも SSE をサポートしていません。そのため、IE の場合、"forever iframe" などのフォールバック手法を使用する必要があります。

ホスティングに関する限り、通常の共有ホスティング (およびそれほど安価ではないもの) では、問題と見なされない限り、php スクリプトを長時間実行できます。

于 2013-03-08T09:50:52.033 に答える