1

私はチャットのような Web アプリケーションを計画しています。あるユーザーが何かを投稿すると、他のすべてのユーザー (つまり、ブラウザーでそのサイトを指しているユーザー) が即座に更新されます。これに対する一般的な選択は、ロングポーリング AJAX リクエストを使用したコメット スタイルのメッセージングです。jQuery を使用してクライアント側の部分を作成することは、それほど問題ではありません。

しかし、PHP でサーバー側の部分を実装するにはどうすればよいのでしょうか。投稿/メッセージは MySQL に保存されます。質問は、データベースに新しい投稿を書き込んだ後、待機中のすべてのリクエストに、ポーリングを使用せにデータが利用可能であることを通知するにはどうすればよいですか? ポーリングは機能しますが、見苦しく、リソースを浪費するため、これは私が望んでいないことです:

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

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

4

1 に答える 1

0

AJAX ポーリングを使用して定期的にスクリプトを更新するクエリを実行するという 1 つの可能な解決策については既に述べました。ポーリングはクライアント側で行われ、サーバー側とは何の関係もありません。

もう 1 つのオプションは、 Meteorなどのコメット サーバーを使用することです。このアプローチにより、PHP スクリプトは新しいメッセージを comet サーバーに通知でき、接続されたクライアントは更新を受信します。あとは、更新をユーザーに表示するための JavaScript を作成するだけです。

于 2010-08-18T19:03:26.170 に答える