Websocket N2O协议在使用gproc:send时发送空数据
我创建了一个N2o协议,该协议通过不同的应用程序族来路由消息(在此之前,我使用了一个cowboy websocket处理程序来完成这项工作) 例如,我在协议中有一段代码,用于向注册进程发送消息Websocket N2O协议在使用gproc:send时发送空数据,websocket,erlang,cowboy,n2o,Websocket,Erlang,Cowboy,N2o,我创建了一个N2o协议,该协议通过不同的应用程序族来路由消息(在此之前,我使用了一个cowboy websocket处理程序来完成这项工作) 例如,我在协议中有一段代码,用于向注册进程发送消息 > info({text,<<"REG:",Msg/binary>> }, Req, State) -> > {[{_,Family}]}=jiffy:decode(Msg), Test = gproc:reg({p, l, Family}, &g
> 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};
>信息({text,},Req,State)->
>{[{{{,Family}]}=jiffy:decode(Msg),Test=gproc:reg({p,l,Family}),
>1),{回复、请求、状态};
信息({text,}=M,请求,状态)->
{[{{{{{{uuu,Type},{{{{uu,Action},{{{{uu,From},{{{{uu,To},{{{{uu,Message}]}=jiffy:decode(Msg),
gproc:send({p,l,To},{self(),}),
{回复,请求,状态};
在我的HTML客户机中,首先我根据协议注册
var msg={family:“JS”};
send(“REG:+JSON.stringify(msg))
我验证了我的html进程是否注册良好
然后,从同一个HTML客户端调用传输协议方法,如下所示:
msg={Type:“TRANSMIT:”,Action:“Chat”,From:“JS”,To:“JS”,
信息:“你好,我是Js”};
send(“传输:+JSON.stringify(msg))
基本上在这个阶段,我应该在我的HTML客户端中收到一条包含“Hello I am Js”的消息,但我总是收到一个空数据字符串,如:
MessageEvent{isTrusted:true,数据:,来源:
“ws://192.168.1.20:8000”,lastEventId:,来源:null…}
信息:
我收到了如下回复信息:
注册过程中:
MessageEvent{isTrusted:true,data:“进程已注册”
成功”,来源:“ws://192.168.1.20:8000”,lastEventId:“”,
来源:null…}
提交邮件时:
MessageEvent{isTrusted:true,data:“消息已传输”
成功”,来源:“ws://192.168.1.20:8000”,lastEventId:“”,
来源:null…}
另外,当我使用我的牛仔ws处理程序时,我没有遇到这样的问题
心脏协议定义了源于客户端的消息N2O、PING和源于服务器的消息PONG、IO和NOP。IO消息包含包含UTF-8 JavaScript字符串的EVAL,数据回复包含任何二进制字符串,包括BERT编码的数据。“PING”和“N2O”被定义为4字节的文本消息,第二个可以后跟任何文本字符串。NOP是0字节的确认数据包
根据N2O文件:
如果要违反N2O协议,应创建自己的原始自定义协议模块:
-module(protocol).
-include_lib("n2o/include/wf.hrl").
-compile(export_all).
event(Event) -> ok.
finish(State,Ctx) -> {ok,State,Ctx}.
init(State,Ctx) -> wf:reg(topic), {ok,State,Ctx#cx{module=protocol}}.
info({text,Text}=Message, Req, State) -> {reply, Text, Req, State};
info(Message, Req, State) -> {unknown,Message, Req, State}.
并确保在sys.config中仅为所有处理程序启用了协议
:
{n2o, [{protocols,[protocol]},
{query,protocol},
{session,protocol},
{route,protocol}]},
用法:
wscat -c ws://127.0.0.1:9000/
connected (press CTRL+C to quit)
> echo
< echo
wscat-CWS://127.0.0.1:9000/
已连接(按CTRL+C退出)
>回音
-module(protocol).
-include_lib("n2o/include/wf.hrl").
-compile(export_all).
event(Event) -> ok.
finish(State,Ctx) -> {ok,State,Ctx}.
init(State,Ctx) -> wf:reg(topic), {ok,State,Ctx#cx{module=protocol}}.
info({text,Text}=Message, Req, State) -> {reply, Text, Req, State};
info(Message, Req, State) -> {unknown,Message, Req, State}.
并确保在sys.config中仅为所有处理程序启用了协议
:
{n2o, [{protocols,[protocol]},
{query,protocol},
{session,protocol},
{route,protocol}]},
用法:
wscat -c ws://127.0.0.1:9000/
connected (press CTRL+C to quit)
> echo
< echo
wscat-CWS://127.0.0.1:9000/
已连接(按CTRL+C退出)
>回音