1

我想构建一个动态网络应用程序,我发现 sockjs 非常有前途。

但是,我不知道如何将数据从服务器推送到客户端。文档(包含两个小示例)显示了一些 « echo server » 示例。

但我会得到的是:

  • 用户打开与 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 的 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 回答