카우보이 websocket 핸들러에서 jiffy로 구문 분석하는 동안 잘못된 json을 잡으려고합니다. json이 유효하거나 유효하지 않은 websocket_info
경우 클라이언트에 응답 할 적절한 메시지를 전달하고 싶습니다 . 다음은 내 코드입니다.
websocket_handle({text, Msg}, Req, State) ->
lager:info("Got message ~p",[Msg]),
try jiffy:decode(Msg) of
{[{A,B}]}->{{[{A,B}]},Req,State};
_->{{invalid,Msg},Req,State}
catch
_:_->
{{invalid,Msg},Req,State}
end;
websocket_handle(_Data, Req, State) ->
{ok, Req, State}.
websocket_info({[{A,B}]},Req,State) ->
{reply,{text,jiffy:encode({registered,B})},Req,State};
websocket_info({invalid,Msg},Req,State)->
{reply,{text,jiffy:encode({error,<<"invalid json">>})},Req,State};
이로 인해 런타임 예외가 발생합니다.
12 : 07 : 48.406 [오류] Ranch listener http에 연결 프로세스가 <0.523.0> 종료되었으며 이유 : {{try_clause, {{[{<< "register">>, << "my-channel">>}]) }, {http_req, # Port <0.1337>, ranch_tcp, keepalive, <0.523.0>, << "GET">>, 'HTTP / 1.1', {{127,0,0,1}, 34869}, < < "127.0.0.1">>, 정의되지 않음, 3000, << "/ websocket /">>, 정의되지 않음, << >>, 정의되지 않음, [], [{<< "upgrade">>, << "websocket" >>}, {<< "connection">>, << "Upgrade">>}, {<< "host">>, << "127.0.0.1:3000">>},{<<"origin" >>, << "
http://localhost:4000
">>}, {<<"pragma ">>, <<"no-cache ">>}, {<<"cache-control ">>, <<"no-cache ">>}, {<< "sec-websocket-key">>, << "ueSRxsIc4wM7KdGnyhJOhw ==">>}, {<< "sec-websocket-version">>, << "13">>}, {<< "sec-websocket -extensions ">>, <<"x-webkit-deflate-frame ">>}, {<<"user-agent ">>, <<"Mozilla / 5.0 (X11; Linux i686 (x86_64)) AppleWebKit / 537.36 (Gecko와 같은 KHTML) Chrome / 30.0.1599.114 Safari / 537.36 ">>}], [{<<"sec-websocket-extensions ">>, [{<<"x-webkit-deflate-frame ">>, []}]}, {<< "upgrade">>, [<< "websocket">>]}, {<< "connection ">>, [<<"upgrade ">>]}], undefined, [{websocket_compress, false}, {websocket_version, 13}], waiting, undefined, << >>, false, done, [], < <>>, undefined}, undefined_state}}, [{cowboy_websocket, handler_call, 7, [{file, "src / cowboy_websocket.erl"}, {line, 598}]}, {cowboy_protocol, execute, 4, [{file , "src / cowboy_protocol.erl"}, {line, 529}]}]}
그래서 어떻게 할 수 있습니까?
답장은 다음에서 반환되어야합니다 websocket_handle
.
websocket_handle({text, Msg}, Req, State) ->
lager:info("Got message ~p", [Msg]),
try jiffy:decode(Msg) of
{[{A, B}]}->
{reply, {text, jiffy:encode({[{registered,B}]})}, Req, State};
_ ->
{reply, {text, jiffy:encode({[{error,<<"invalid json">>}]})}, Req, State}
catch
_:_ ->
{reply, {text, jiffy:encode({[{error,<<"invalid json">>}]})}, Req, State};
end;
websocket_handle(_Data, Req, State) ->
{ok, Req, State}.
websocket_info(_Info, Req, State) ->
{ok, Req, State}.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다