使用多个erlang行为

时间:2017-06-22 23:57:53

标签: erlang gen-fsm

我有一个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]函数中需要不同的返回类型,我开始认为这是否真的可行。只想与有经验的人联系。

感谢。

1 个答案:

答案 0 :(得分:1)

原则上,我不认为这是一个问题:init/1init/2是两个完全不同的功能,gen_fsm:start_link只会调用init/1和{{1} }只会调用websocket_client:start_link。当然,init/2的回调中的状态不会传递给gen_fsm,因此它们可能完全不同。在实践中,我希望它真的令人困惑。

相反,我将websocket客户端分成一个单独的模块,该模块从websocket_client调用(如果我理解正确的话)。