我创建了一个 N2o 协议,通过不同的应用程序系列路由消息,(在此之前我使用牛仔 websocket 处理程序来完成这项工作)
因此,例如,我的协议中有此代码,用于向已注册的进程发送消息
> info({text,<<"REG:",Msg/binary>> }, Req, State) ->
> {[{_,Family}]}=jiffy:decode(Msg), Test = gproc:reg({p, l, Family},
> 1), {reply, <<"process registered successfully">>, Req, State};
info({text,<<"TRANSMIT:",Msg/binary>> }=M, Req, State) ->
{[{_,Type},{_,Action},{_,From},{_,To},{_,Message}]}=jiffy:decode(Msg),
gproc:send({p, l, To}, {self(),<<"Hi I am a good message!">>}),
{reply, <<"message transmitted successfully">>, Req, State};
在我的 HTML 客户端中,首先我在协议下注册
var msg = {family: "JS"}; websocket.send("REG:"+JSON.stringify(msg) );
并且我验证了我的 html 进程已经很好地注册了
然后,从我的同一个 HTML 客户端,我调用了传输协议方法,例如:
msg = {Type: "TRANSMIT:", Action: "Chat", From: "JS", To: "JS", Message:"Hello I am Js"}; websocket.send("传输: "+JSON.stringify(msg) );
基本上在这个阶段,我应该在我的 HTML 客户端中收到一条包含“Hello I am Js”的消息,但我总是收到一个空数据字符串,例如:
MessageEvent {isTrusted: true, data: "", origin: "ws://192.168.1.20:8000", lastEventId: "", source: null…}
信息:
我很好地收到了回复信息如下:
注册过程时:
MessageEvent {isTrusted: true, data: "进程注册成功", origin: "ws://192.168.1.20:8000", lastEventId: "", source: null…}
提交消息时:
MessageEvent {isTrusted: true, data: "消息传输成功", origin: "ws://192.168.1.20:8000", lastEventId: "", source: null…}
此外,当我使用我的牛仔 ws 处理程序时,我没有遇到这样的问题。