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

У меня есть процесс 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 (если я вас правильно понял).

Другие вопросы по тегам