カウボーイで開発されたErlangWebSocketサーバーがあります。
クライアントから送信されたコマンドに応じて、接続ごとに状態変数を保持したいと思います。
各WebSocket接続の状態変数を永続化するための最良の方法はどれですか?
編集:「永続化」とは、データベースを必要とせず、接続の存続期間中のみメモリに保持する必要があることを意味します。
State
すべてのWebSocket関数は、関数呼び出し間で独自の状態を維持するために使用されるユーザー定義の引数を取ります。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}.