彗星スタイルのメッセージング:ポーリングなしでサーバーパーツを実装する方法は?

StackOverflow https://stackoverflow.com/questions/3515242

質問

私はチャットのようなWebアプリケーションを計画しています。1人のユーザーが何かを投稿するたびに、他のすべてのユーザー(つまり、ブラウザを持っている人がそのサイトを指している人)がすぐに更新されます。このための一般的な選択は、長引くAJAXリクエストを使用した彗星スタイルのメッセージです。 jQueryでクライアント側の部分を書くことはそれほど問題ではありません。

しかし、PHPでサーバー側の部分を最適に実装する方法は疑問に思います。投稿/メッセージはMySQLに保存され、質問は次のとおりです。データベースに新しい投稿を書いた後、すべての待機要求に通知するにはどうすればよいですか、そのデータはそれらが利用可能です それなし 投票を使用しますか?ポーリングは機能しますが、それは醜くてリソースを無駄にします。したがって、これは私が望んでいないことです:

while (timeout not reached) {
    if ($database->has_changes())
        break;
    sleep(1);
}
handle_changes_if_any();

ここで私を助けるMySQL機能はありますか?ある種のIPCが役立ちますか?サーバーはApacheを実行します。

役に立ちましたか?

解決

既に1つの可能なソリューションについて言及しました。これは、Ajax Pollingを使用して、アップデートのために定期的にスクリプトを照会することです。ポーリングはクライアント側で行われ、サーバー側とは何の関係もありません。

別のオプションは、次のような彗星サーバーを使用することです 流星. 。このアプローチを使用すると、PHPスクリプトはCometサーバーに新しいメッセージを通知でき、接続されたクライアントが更新を受信します。その後、ユーザーに更新を表示するJavaScriptを作成するのはあなた次第です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top