2012-10-20 101 views
0

我有一个与牛仔开发的Erlang websocket服务器。Erlang牛仔连接状态

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

哪一个持久化每个websocket连接的状态变量的最好方法是?

编辑:与“坚持”我的意思是它应该保存在内存只有连接的一生,不需要数据库。

+2

定义'persist'。坚持套接字连接的生命周期,还是状态必须去某个数据库? –

回答

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}.