2012-10-20 103 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}.