Использование более чем одного поведения erlang

У меня есть процесс erlang gen_fsm, который общается с удаленным сервером через tcp, используя встроенный в erlang gen_tcp.

Я хотел бы сделать это клиентом веб-сокета. После некоторого расследования я получил эту клиентскую библиотеку erlang websocket клиент Erlang Websocket.

Глядя на некоторые примеры, похоже, я должен использовать

-поведение (websocket_client_handler).

В основном, я делаю это в моей start_link

start_link(UserID) ->
   gen_fsm:start_link(?MODULE, [UserID], []).

Однако другое поведение предполагает другие возвращаемые значения для инициализации и другого состояния. У меня уже есть состояние для моего gen_fsm.

Может ли кто-нибудь подкинуть контекст вокруг этого.

Я думаю, что нет ничего плохого в том, чтобы определить два поведения для одного и того же модуля, но, учитывая, что каждое поведение требует разных типов возврата в функциях init/[1/2], я начинаю думать, действительно ли это возможно. Просто хотел обратиться к опытному человеку.

Спасибо.


person sad    schedule 22.06.2017    source источник


Ответы (1)


В принципе, я не думаю, что это проблема: init/1 и init/2 это две совершенно разные функции, gen_fsm:start_link будет вызывать только init/1, а websocket_client:start_link будет вызывать только init/2. И, конечно же, состояние от обратных вызовов gen_fsm не будет передано websocket_client, поэтому они могут быть совершенно разными. На практике я ожидаю, что это будет действительно запутанным.

Вместо этого я бы выделил клиент websocket в отдельный модуль, который вызывается из gen_fsm (если я вас правильно понял).

person Alexey Romanov    schedule 24.06.2017