我想建立一个动态的网络应用程序,我发现sockjs非常有希望。
但是,我无法想象如何将数据从服务器推送到客户端。文档(包含两个小例子)显示了一些«echo server»示例。
但我得到的是:
我不知道该怎么做。
这是他们的处理程序
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会向客户发送数据。
我不知道怎么写。
由于
答案 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