使用多个erlang行为
我有一个erlang gen_fsm进程,使用erlang的内置gen_tcp通过tcp与远程服务器通信。
我想使这个网络套接字客户端。 经过一番调查,我得到了这个erlang websocket客户端库Erlang Websocket客户端。
看一些例子,它看起来像我必须使用
-behaviour(websocket_client_handler)。
基本上,我在我的start_link中这样做
start_link(UserID) ->
gen_fsm:start_link(?MODULE, [UserID], []).
但是,其他行为期望init和不同状态的返回值不同。 我已经有了一个我的gen_fsm的状态。
有人可以在这方面提出一些背景。
我认为为同一个模块定义两个行为是没有错的,但是假设每个行为在init / [1/2]函数中需要不同的返回类型,我开始考虑这是否真的是可行的。 只是想联系有经验的人。
谢谢。
原则上,我不认为这是一个问题: init/1
和init/2
是两个完全不同的函数, gen_fsm:start_link
只会调用init/1
而websocket_client:start_link
只会调用init/2
。 当然,来自gen_fsm
回调函数的状态不会传递给websocket_client
,所以它们可以完全不同。 在实践中,我希望它真的很混乱。
相反,我会将websocket客户端分离成一个单独的模块,该模块从gen_fsm
调用(如果我正确理解了你的话)。