0

クライアント/ブラウザが Mochiweb サーバーに接続するたびに、Loop の新しいプロセスが作成されますね。したがって、あるクライアントから別のクライアント (典型的なチャット システム) にメッセージを転送したい場合、Loop の self() を使用して、接続されているすべてのクライアントの PID を保存する必要があります。

これまでのところ何か (またはすべて) が間違っている場合は、システムがどのように機能するかを簡単に説明してください。サーバー プロセスはどこにあり、クライアント プロセスはどこにありますか?

PID を使用してクライアントのループ プロセスにメッセージを送信する方法は? 「受信」をループのどこに置くかということですか?

4

3 に答える 3

1

これは、Mochiweb Web チャットの実装に関する優れた記事です。HTTP はステートレス プロトコルであるため、HTTP クライアントには PID がありません。Cookie を使用して、リクエストをチャット ルームの固有の訪問者に関連付けることができます。

于 2011-07-19T20:54:19.107 に答える
0

いくつかのデータ構造を使用して、IDにPIDを使用しないようにすることができます。queue()の例を見てみましょう。ユーザーごとに明確に一意に識別可能なqueue()を実装した、RAMテーブルを備えた複製されたmnesiaデータベースがあるとします。ユーザーへの接続を保持するプロセス(mochiwebプロセス)は、このユーザーセッションのIDのみを保持します。次に、このIDを使用して、定期的にMnesiaのqueue()にチェックインし続けます(このように意図している場合は、ユーザーセッションの間mochiwebプロセスを存続させます)。つまり、ユーザーが接続しているプロセスPIDに関係なく、プロセスにユーザーIDがあれば、メッセージキュー()からメッセージをフェッチ(読み取り)できます。その結果、ユーザーが複数のクライアントセッションを持つ可能性があります。

于 2011-08-07T09:21:55.270 に答える
0

まず、調査を正しく行います。この記事、この記事、そしてこの最後記事をチェックしてください。

mochiweb プロセスがチャット データを他のアプリケーション サーバー (gen_server、多くのスーパーバイザーを持つ OTP アプリ内のワーカー、他の分散ワーカーなど) に取り込めるようにします。mochiweb プロセスの PID に依存しないでください。ユーザーを一意に識別する別の方法を用意してください。Cookie、セッション ID、認証トークンなど、アプリケーションによってのみ管理されるもの。mochiweb プロセスは、利用可能になるとすぐにサーバーにチャット データを配信します。すべてのユーザーが他のユーザーがチャット メッセージを投稿するメッセージ キューを持っている mnesia で、ある種のキューイングを行うことができます。次に、mochiweb プロセスは、各接続でユーザーが利用できるメッセージがあるかどうかを mnesia に尋ね続けます。要約すると、チャットの方法論に依存します: HTTP ロング ポーリング/COMET、REST/ サーバー プッシュ/キープアライブ接続 ブラー ブラー ブラー....

于 2011-07-20T07:38:06.570 に答える