我有一个用Cowboy开发的Erlang websocket服务器。
我想为每个连接保留一个状态变量,这取决于客户端发送的命令。
哪个是为每个websocket连接保留状态变量的最佳方法?
编辑:使用“persist”我的意思是它应该只在连接的生命周期内保存在内存中,不需要数据库。
答案 0 :(得分:2)
所有websocket函数都采用用户定义的State
参数,用于在函数调用之间保持自己的状态。当websocket关闭时,状态被丢弃。
您在websocket_init/3
的返回值中初始化它,websocket_handle/3
和websocket_info/3
将状态作为参数,您可以在其中查找所需的数据。在websocket_init/3
和websocket_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}.