Erlang Cowboy连接状态

时间:2012-10-20 14:50:52

标签: erlang cowboy

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

您在websocket_init/3的返回值中初始化它,websocket_handle/3websocket_info/3将状态作为参数,您可以在其中查找所需的数据。在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}.