Использование более чем одного поведения Эрланга
У меня есть процесс erlang gen_fsm, который общается с удаленным сервером через tcp, используя встроенный в erlang gen_tcp.
Я хотел бы сделать это клиентом веб-сокета. После некоторого расследования я получил эту клиентскую библиотеку Erlang Websocket.
глядя на некоторые примеры, похоже, что я должен использовать
-behaviour (websocket_client_handler).
По сути, я делаю это в моей start_link
start_link(UserID) ->
gen_fsm:start_link(?MODULE, [UserID], []).
Однако другое поведение предполагает другое возвращаемое значение для init и другое состояние. У меня уже есть состояние для моего gen_fsm.
Может кто-то бросить некоторый контекст вокруг этого.
Я думаю, что нет ничего плохого в том, что два поведения определены для одного и того же модуля, но, учитывая, что для каждого поведения требуются разные типы возврата в функциях init/[1/2], я начинаю думать, действительно ли это возможно. Просто хотел дотянуться до кого-нибудь опытного.
Благодарю.
1 ответ
В принципе, я не думаю, что это проблема: init/1
а также init/2
две совершенно разные функции, gen_fsm:start_link
буду только звонить init/1
а также websocket_client:start_link
буду только звонить init/2
, И, конечно же, государство из gen_fsm
обратные вызовы не будут переданы websocket_client
То есть они могут быть совершенно разными. На практике, я ожидал бы, что это действительно сбивает с толку.
Вместо этого я бы выделил клиент websocket в отдельный модуль, который вызывается из gen_fsm
(если я вас правильно понял).