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