2012-10-20 4 views
0

나는 카우보이와 함께 개발 된 얼랑 websocket 서버를 가지고 있습니다.얼랭 카우보이 연결 상태

클라이언트가 보낸 명령에 따라 각 연결마다 상태 변수를 유지하고 싶습니다.

각 websocket 연결에 대한 상태 변수를 유지하는 가장 좋은 방법은 무엇입니까?

편집 : "지속"은 연결의 수명 동안 만 데이터베이스에 저장할 필요가 있음을 의미합니다.

+2

'지속'을 정의하십시오. 소켓 연결 수명 동안 지속되거나 상태가 어딘가에 데이터베이스에 있어야합니까? –

답변

2

모든 websocket 함수는 사용자 정의 State 인수를 사용하여 함수 호출간에 고유 한 상태를 유지합니다. 상태는 웹 소켓이 닫힐 때 폐기됩니다.

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