1

動的なWebアプリを作成したいのですが、sockjsは非常に有望です。

ただし、サーバーからクライアントにデータをプッシュする方法がわかりません。ドキュメント(2つの小さな例で構成されています)には、いくつかの«エコーサーバー»の例が示されています。

しかし、私が得るものは:

  • ユーザーがsockjsとの接続を開き、PIDまたはIDを取得します
  • 次に、このpidにメッセージを送信して、ブラウザーにプッシュできます。

どうしたらいいのかわからない。

これは彼らのハンドラーです

service_echo(_Conn, init, state)        -> {ok, state};
service_echo(Conn, {recv, Data}, state) -> Conn:send(Data);
service_echo(_Conn, closed, state)      -> {ok, state}.

こんなもの欲しい

service_push(Conn, init, state) ->
    Pid = Conn:pid(),
     ---- here get user ID from cookies or another way ----
    push_service:register(user,UserID,Pid),
    {ok, state};

service_echo(Conn, {recv, Data}, state) -> do_something:with(Data);

service_echo(Conn, closed, state) -> service_push:unregister(Conn:pid()).

そして、私はConn's Pidに情報を送信することができ、このConnはクライアントにデータを送信します。

書き方がわかりません。

ありがとう

4

1 に答える 1

1

pid は「Conn」レコードの下に隠されています。「Conn」を渡すだけです。何かを送信したいときはいつでも、'Conn:send(Data)' を呼び出します。それだけです。

このモデルでは、接続が閉じられていても、明らかに Conn を渡すことができます。「適切に」行うには、接続が作成されるたびに gen_server を作成し、そこに Conn をカプセル化します。そうすれば、コードはアプリと sockjs 間のデータの受け渡しを担当します。

これがまさにそれを行う私のコードです(ただし、より複雑なプロジェクトの場合): https://github.com/rabbitmq/rabbitmq-web-stomp/blob/master/src/rabbit_ws_sockjs.erl#L56

于 2012-08-22T11:11:54.293 に答える