我有一个erlang gen_fsm进程,使用erlang的内置gen_tcp通过tcp与远程服务器通信。
我想把它变成一个web-socket客户端。经过一番调查,我得到了这个erlang websocket客户端库Erlang Websocket client。
看一些例子,看起来我必须使用
-behaviour(websocket_client_handler)。
基本上,我在start_link中执行此操作
start_link(UserID) ->
gen_fsm:start_link(?MODULE, [UserID], []).
但是,其他行为需要init和不同状态的不同返回值。我已经有了gen_fsm的状态。
有人可以抛出一些上下文。
我认为为同一个模块定义两个行为并没有错,但考虑到每个行为在init / [1/2]函数中需要不同的返回类型,我开始认为这是否真的可行。只想与有经验的人联系。
感谢。
答案 0 :(得分:1)
原则上,我不认为这是一个问题:init/1
和init/2
是两个完全不同的功能,gen_fsm:start_link
只会调用init/1
和{{1} }只会调用websocket_client:start_link
。当然,init/2
的回调中的状态不会传递给gen_fsm
,因此它们可能完全不同。在实践中,我希望它真的令人困惑。
相反,我将websocket客户端分成一个单独的模块,该模块从websocket_client
调用(如果我理解正确的话)。