1

我有一个用 Cowboy 开发的 Erlang websocket 服务器。

我想为每个连接保留一个状态变量,这取决于客户端发送的命令。

为每个 websocket 连接保留状态变量的最佳方法是什么?

编辑:使用“持久”我的意思是它应该只在连接的生命周期内保存在内存中,不需要数据库。

4

1 回答 1

3

所有 websocket 函数都采用用户定义的State参数,用于在函数调用之间保持您自己的状态。当 websocket 关闭时,状态被丢弃。

您在 的返回值中对其进行初始化websocket_init/3websocket_handle/3并将websocket_info/3状态作为参数,您可以在其中查找所需的数据。在 and 的返回值中websocket_init/3websocket_handle/3您传递新状态(如果不需要状态更新,则相同)。草图:

websocket_init(_TransportName, Req, _Opts) ->
     MyInitialState=just_started, % The state can be any erlang term,e.g. a record
     {ok, Req, MyInitialState}.

websocket_handle({text, _Msg}, Req, State) ->
     NewState = case State of
            just_started -> up_and_running;
            _ -> still_running
          end,
     {ok, Req, NewState}.
于 2012-10-20T20:46:46.743 回答