使用不止一种 erlang 行为
Posted
技术标签:
【中文标题】使用不止一种 erlang 行为【英文标题】:Using more than one erlang behaviour 【发布时间】:2017-11-26 10:06:18 【问题描述】:我有一个 erlang gen_fsm 进程,它使用 erlang 的内置 gen_tcp 通过 tcp 与远程服务器通信。
我想让它成为一个 web-socket 客户端。经过一番调查,我得到了这个 erlang websocket 客户端库Erlang Websocket client。
看一些例子,看来我必须使用
-行为(websocket_client_handler)。
基本上,我在我的 start_link 中这样做
start_link(UserID) ->
gen_fsm:start_link(?MODULE, [UserID], []).
但是,另一种行为需要不同的初始化返回值和不同的状态。我的 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
调用(如果我理解正确的话)。
【讨论】:
以上是关于使用不止一种 erlang 行为的主要内容,如果未能解决你的问题,请参考以下文章