0

Chris McCord のチャットの例を変更して、機能を追加したいと考えています。基本的に、JavaScript クライアントが、JSON を使用して 、getUsersInRoom(room_id)などの多くの便利な関数にアクセスできるようにしたいと考えています。is_online(user_id)

しかし、これを行う方法がわかりません。Channels のドキュメントには、次のように書かれています。

各チャネルは、これら 4 つのコールバック関数 (join/3、terminate/2、handle_in/3、および handle_out/3) のそれぞれの 1 つ以上の句を実装します。

これは、これらの機能のみが許可されていることを意味しますか? 私が必要としているのはソケット API だと思いますが、これまでソケットを扱ったことがないので、助けていただければ幸いです。また、この例は、引数として渡された文字列を使用した直接関数呼び出しでも動作するようですが、チャット システムで JSON を使用する必要があります。どうすればこれを達成できるかまったくわかりません。

4

1 に答える 1

0

あなたの質問は 2 部構成なので、2 部構成で回答します。また、あなたの質問は、Elixir や Phoenix に固有のものではなく、より一般的な設計に関するものであるため、一般的な回答も保持します。

また、この例は、引数として渡された文字列を使用した直接関数呼び出しでも動作するようですが、チャット システムで JSON を使用する必要があります。どうすればこれを達成できるかまったくわかりません。

ネットワーク経由で JSON 型を渡すようなものはありません。JSON を文字列にマーシャリング (文字列化) し、その文字列を送信してから、反対側で非マーシャリング (解析) して JSON に戻します。したがって、メッセージを JSON として構造化する場合は、これは非常に優れています。各受信ポイントでマーシャリング/アンマーシャリングを行うことを忘れないでください。

(言い換え)便利な機能

これを行う最も簡単な方法は、これらの関数を実際のメッセージ タイプにし、handle_inまたはhandle_out関数を使用してそのタイプを選択し、データを収集して返すことです。たとえば、current_online_usersハンドルのリストを返す 1 つのメッセージを指定します。そのリストをクライアント側でフィルタリングして、存在を確認できます。一部の Websocket 実装にはプレゼンス フックもありますが、Phoenix の実装には慣れていません。

これを行う別の方法は、JSON メッセージ構造に組み込むことです。最上位では、Phoenix から見たルーム内の現在のユーザー数を返すことができます。

お役に立てれば。

于 2016-09-28T02:49:46.857 に答える