2016-09-23 14 views
0

Chris McCordのchat exampleを変更して、機能を追加したいと考えています。基本的には、JSONを使用して、getUsersInRoom(room_id)is_online(user_id)などの便利な関数にJavaScriptクライアントからアクセスする必要があります。チャンネルにカスタム機能を追加する

しかし、私はこれを行う方法がわかりません。参加/ 3、終了/ 2、handle_in/3、および handle_out/3 - 各チャネルは、これらの4つの のコールバック関数のそれぞれの一の以上の句を実装します

:チャネル上のドキュメントがあると言います。

これらは唯一の機能ですか?私は必要なのはソケットAPIだと思うが、以前はソケットで作業したことがないし、助けてくれてありがとう。また、この例では文字列を引数として渡して直接関数呼び出しを行うように見えますが、JSONを使用するにはチャットシステムが必要です。私はこれをどのように達成できるか全く分かりません。

答えて

0

あなたの質問は2つのパターなので、私はあなたに2部構成の回答を与えます。また、あなたの質問はエリクサーやフェニックスに固有のものではなく、より一般的なものです。

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

JSONタイプを配線に渡すことはありません。 JSONを文字列にマーシャリング(文字列化)し、その文字列を送信し、反対側のJSONに逆マーシャル(解析)します。したがって、メッセージをJSONとして構造化したいのであれば、それは完全にクールです。各受信点で整列/整列解除することを覚えておいてください。

(言い換え)簡易関数

これを行う最も簡単な方法は、次に、これらの機能を実際のメッセージ・タイプを作成するデータを、そのタイプを選ぶ収集し返すことのいずれかhandle_in又はhandle_out関数を使用することです。たとえば、ハンドルのリストを返す1つのメッセージをcurrent_online_usersにします。存在を確認するために、クライアント側のリストをフィルタリングすることができます。いくつかのwebsocket実装には存在フックもありますが、私はPhoenixのものには慣れていません。

もう1つの方法は、JSONメッセージ構造を構築することです。最上位レベルでは、フェニックスが見た部屋の現在のユーザー数を返すことができます。

これが役に立ちます。

関連する問題