【问题标题】:Using more than one erlang behaviour使用不止一种 erlang 行为
【发布时间】: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] 函数中需要不同的返回类型,我开始思考这是否真的可行。只是想联系有经验的人。

谢谢。

【问题讨论】:

    标签: erlang gen-fsm


    【解决方案1】:

    原则上我不认为有问题:init/1init/2 是两个完全不同的函数,gen_fsm:start_link 只会调用init/1websocket_client:start_link 只会调用init/2。当然,来自gen_fsm 回调的状态不会传递给websocket_client,所以它们可以完全不同。在实践中,我希望它真的很混乱。

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

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 2014-06-03
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      相关资源
      最近更新 更多