推送SockJS-erlang,Howto?

时间:2012-08-17 13:20:47

标签: erlang websocket push comet

我想建立一个动态的网络应用程序,我发现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会向客户发送数据。

我不知道怎么写。

由于

1 个答案:

答案 0 :(得分:1)

嗯,pid隐藏在'Conn'记录下。只是通过'康恩'。无论何时你想发送一些东西,都可以打电话给'Conn:send(Data)',就是这样。

在这个模型中,即使连接关闭,你仍然可以绕过Conn。为了“正确”地执行它,您可以在每次创建连接时创建gen_server并将Conn封装在那里。这样,您的代码将负责在您的应用和sockj之间传递数据。

这是我的代码完全正确(但对于更复杂的项目):    https://github.com/rabbitmq/rabbitmq-web-stomp/blob/master/src/rabbit_ws_sockjs.erl#L56