У меня есть функция service_echo
в простом приложении чата, которое использует SockJS для реализации многопользовательского приватного чата. Я создал таблицу ETS для списка онлайн-пользователей. Сохраняя сеанс SockJS, я думал отправлять сообщение этому соединению всякий раз, когда я получаю сообщение от другого соединения.
Вот мой код service_echo
.
service_echo(Conn, {recv, Data}, state) ->
Obj = mochijson2:decode(Data),
{struct, JsonData} = Obj,
Name = proplists:get_value(<<"name">>, JsonData),
A = ets:lookup(username,Name),
io:format("~p",[Conn]),
if
length(A) =:= 0 ->
ets:insert(username,{Name,Conn});
true ->
[{AA,BB}] = ets:lookup(username,Name),
BB:send(Data)
end,
io:format("hello");
Несмотря на то, что Conn и BB одинаковы, Conn:send(data)
все равно отправляет в браузер правильные данные, а BB:send(Data)
ничего не делает и даже не показывает ошибку. Поскольку я новичок в Erlang, прошу извинить меня за любые непреднамеренные ошибки.
StateEcho = sockjs_handler:init_state( <<"/echo">>, fun service_echo/3, state, [{response_limit, 4096}]),
вызывает функцию service_echo. Это код, который я запускаю, но сообщения не отправляютсяBB:send(Data)
. - person user2512324   schedule 14.08.2013{<0.161.0>, [{peername,{{127,0,0,1},56247}}, {sockname,{{127,0,0,1},56247}}, {path,"/echo/039/62l0slqe/websocket"}, {headers,[]}]}}
. Что раздражает, так это Conn:send работает там, где BB, который совпадает с Conn через сопоставление с образцом, не работает как как работает Конн.BB:send()
не работает. - person user2512324   schedule 14.08.2013