Websocket N2O协议在使用gproc:send时发送空数据

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

我创建了一个N2o协议,该协议通过不同的应用程序族来路由消息(在此之前,我使用了一个cowboy 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};
>信息({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退出) >回音 心脏协议定义了源于客户端的消息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退出) >回音