0

私は、グループに属するユーザーによって投稿されたメッセージを、ユーザー名と書き込み時間とともに表示するFlashベースのチャットクライアントを開発しました。データはグループID、ユーザーID、メッセージとともにmysqlデータベースに保存されるため、チャットセッションを超えて保持され、後でログインするユーザーは、チャットではなく掲示板のディスカッションを見ることができます。ユーザーがメッセージを書くとき、チャットクライアントが即座に更新するようにしたいのですが、リアルタイムチャットのように見えます。これまでの私の解決策は、データベースに新しいコメントを照会してこれをFlashに返すPHPページを呼び出す間隔をFlashコードに含めることでした。

私が読んだことから、このアプローチはロングポーリングと呼ばれていると思いますか?そうですか?これはボリュームに対して十分に堅牢ですか?変更があったときにデータをクライアントにプッシュすることを検討したほうがよいでしょうか?これらの変更を検出するにはどうすればよいですか?たとえばAPEを見てきましたが、これがメッセージをデータベースに保存しているとは思いません。

助言がありますか?

4

2 に答える 2

2

ポーリングの悪い点は、非常に速く高価になる可能性があることです。

オンラインに10000人のユーザーがいて、チャットの遅延を1秒以内にしたいとします。次に、1秒あたり10000リクエストでサーバーを攻撃します。

小さなものや最新である必要のないものの場合、ポーリングは単純で実際に失敗することはないため、優れたアプローチです。

これがチャットを使用する最大100人の小さなコミュニティの場合、これは問題にはなりません。

それとは別に、APE、SmartFox、Red5、またはさまざまなものを使用して、永続的なリレーサーバー、つまり、すべてのクライアントに永続的に接続し、変更(新しいメッセージなど)を通知するサーバーを作成できます。

いつものように、私の個人的なアドバイスはHaxeを使用することです。チャットチュートリアルを使用して開始できます。Haxeの学習曲線はかなり急ですが、それだけの価値はあると思います。ActionScriptとPHPの両方を残してよかったです。

編集:あなたが説明するのは長いポーリングではありません。また、少なくとも古典的にApacheで使用されている場合は、PHPで長いポーリングを行うことはほとんどできません。Apacheは特定の数のPHPプロセスを作成します。リクエストが到着するたびに、無料のPHPプロセスを探して、リクエストを処理させます。PHPプロセスが完了すると、応答がクライアントに返送されます。使用可能な空きプロセスがない場合は、プロセスが使用可能になるまで要求をバッファリングします。したがって、PHPを使用して従来の方法で長いポーリングを実行しようとすると、サーバー全体を完全にブロックできます。

于 2010-03-03T17:58:17.300 に答える
1

新しいメッセージを受信するたびにアプリケーションに通知する場合は、サーバーに何らかの形式のアプリケーションを実装してデータベースを監視し、データベースの変更を通知してから、更新をクライアントに渡す必要があります。

これは、単にポーリングするよりも効率的です。トラフィックが少ないシナリオを考えている場合、ポーリングを使用すると、関係なくサーバーから地獄をノックアウトすることになります。このようにすると、理由がある場合にのみトラフィックが生成されます。 ..

コメントを入力すると、クライアントはこのアプリケーションに直接(Webサービスを介して)変更を通知でき、このヘルパーアプリはデータベースを更新できます...

私はチャットプログラムの専門家ではありませんが、個人的にチャットプログラムに関与したことはありません...

于 2010-03-03T16:38:53.203 に答える