4

Erlang でコメット チャットを行っています。メッセージ転送には 1 つの接続 (ロングポーリング) のみを使用します。しかし、ご存知のように、ロングポーリング接続は常に接続されたままにすることはできません。新しいメッセージが到着するか、タイムアウトに達するたびに、メッセージは中断され、サーバーに再度接続されます。接続が再接続される前にメッセージが送信された場合、チャットの整合性を維持するのに問題があります。

また、ユーザーが Comet-chat で複数のウィンドウを開いた場合、すべてのチャット メッセージは同期を維持する必要があります。つまり、ユーザーは多数のロング ポーリング接続を持つことができます。そのため、すべてのメッセージを時間どおりに配信し続けることは困難です。

接続ごとにメッセージ キューを作成する必要がありますか? または、これを解決するための他のより良い方法は何ですか?

4

1 に答える 1

1

私にとっては、チャットに接続しているユーザーごとに1つのプロセス/メッセージキューを作成する最も簡単な方法のようです(複数のチャットウィンドウがある場合でも)。チャットウィンドウアプリケーションで最後のメッセージのタイムスタンプを追跡し、再接続するときにこのタイムスタンプの後にメッセージを要求するよりも。メッセージキュープロセスは、妥当な期間だけメッセージを保持する必要があります。このシナリオでは、再接続はすべてクライアント次第です。別のシナリオでは、サーバーからある種のハートビートを送信できますが、私にとっては信頼性が低いようです。タイムアウト以外の切断理由の問題は解決していません。クライアントごと、ユーザーごと、チャットルームごと、...ごとに1つのキューとして、サーバー側のキューイングには多くのバリエーションがあります。

于 2009-08-24T08:59:40.740 に答える