Вопрос по ninenines bullet

96 views
Skip to first unread message

Андрей Никифоров

unread,
Jul 13, 2015, 12:06:16 PM7/13/15
to erlang-...@googlegroups.com
Добрый день.

Разбирался с ninenines bullet (https://github.com/extend/bullet) и застрял на одном моменте.

Вот, предположим, я написал свой хэндлер, согласно документации:

-module(stream_handler).
-export([init/4, stream/3, info/3, terminate/2]).
init(_Transport, Req, _Opts, _Active) ->
   {ok, Req, undefined_state}.
stream(Data, Req, State) ->
   {reply, Data, Req, State}.
info(_Info, Req, State) ->
   {ok, Req, State}.
terminate(_Req, _State) ->
   ok.

Отлично. Кейс: клиент подключается, в хендлере срабатывает init/4.
Далее клиент шлет мне сообщение с неким UID, чтобы я мог опознать конкретного клиента.
Срабатывает stream/3.

Теперь вопрос: как мне послать клиенту сообщение не из stream/3, а откуда-то еще, из другого модуля? Как вообще послать сообщение определенному клиенту не как ответ на его сообщение, а просто так?
Решение скорее всего простое, но я что-то никак не могу сообразить, как это должно работать.

Evgeny M

unread,
Jul 13, 2015, 12:42:43 PM7/13/15
to erlang-...@googlegroups.com
Подозреваю что аналогично этому
Только там вешается таймер, посылающий сообщение в self(), а тебе надо просто сохранить этот self() где-то еще, в ets или каком-то gen_server например. Потом слать сообщения в этот self() и обрабатывать аналогично info(refresh, Req, _)  из примера.
Не забывать чистить сохраненные pid когда соединения закрываются.


понедельник, 13 июля 2015 г., 19:06:16 UTC+3 пользователь Андрей Никифоров написал:

Андрей Никифоров

unread,
Jul 13, 2015, 1:10:48 PM7/13/15
to erlang-...@googlegroups.com
Да, теперь стало ясно, спасибо.

понедельник, 13 июля 2015 г., 19:42:43 UTC+3 пользователь Evgeny M написал:
Reply all
Reply to author
Forward
0 new messages