2013-02-25 2 views
2

저는 SignalR을 실험하기 시작했습니다. 나는 각 연결된 클라이언트에 대한 정보를 저장하는 융통성있는 방법을 생각해 냈습니다. 예를 들어, 각 메시지와 함께 전달하지 않고 채팅 응용 프로그램에 이름을 저장합니다.SignalR - 클라이언트 정보 저장

현재이 속성이 포함 된 개체에 대한 connectionId와 일치하는 정적 사전이 있습니다. 연결시이 사전에 추가하고 연결 해제시 제거합니다.

내가 겪고있는 문제는 모든 연결 해제 이벤트가 발생하지 않는 것입니다. Chrome에서 탭을 닫으면 연결이 끊어지는 것 같습니다. 그러나 탭을 빠르게 새로 고침하면 연결 끊기가 발생하지 않는 것입니다 (적어도 '깨끗하게'는 아님). 예를 들어 같은 탭을 반복해서 다시로드하면 사전에 여러 항목이있을 때 이론적으로는 하나 인 것으로 나타납니다.

이러한 종류의 연결 정보를 저장하는 표준 방법이 있습니까? 그렇지 않으면 내가 겪고있는 문제의 원인은 무엇입니까?

답변

1

실제로 연결 ID 데이터를 올바르게 처리하고 있습니다. OnConnected에서 사용자 데이터를 인스턴스화하고 OnDisconnected에서 인스턴스를 해제해야합니다.

페이지에서 스팸을 새로 고침 할 때 OnDisconnected 이벤트가 즉시 발생하지 않는 상황이 있습니다. 그러나 SignalR은 실제로 연결을 시간 종료하고 지정된 시간 초과 후 (DisconnectTimeout) OnDisconnected 이벤트를 트리거하므로 걱정할 필요가 없습니다.

상당한 시간이 지난 후에 OnConnected 및 OnDisconnected 이벤트에 대해 일대일 상관 관계가없는 시나리오를 발견 한 경우 https://github.com/SignalR/SignalR/issues에 버그를 제출하십시오.

마지막으로 고급 채팅 기능을 수행하고 영감을 얻으려는 사람이 JabbR을 찾고 있다면 오픈 소스입니다! 이 도움이

https://github.com/davidfowl/JabbR

희망!

+0

네, 덕분에 많은 도움이됩니다. 언제나 제대로 끝났습니다. 나는 타임 아웃에 대해 몰랐다. 또한 어떻게 OnReconnect 이벤트를 처리해야합니까? – Barguast

+1

예! GlobalHost.Configuration.DisconnectTimeout. 다시 연결하려면 사용자가 존재하는지 확인해야합니다. 그러면 사용자가 존재하지 않는 경우 아무 것도하지 않고 추가하지 않으면 =). –

+0

사용자가 존재하는지 확인 - 제공된 connectionID가있는 항목이 있는지 여부를 의미합니까? 나는 연결이 실제로 무엇을 나타내고, 무엇이 평생인지, 등등에 관해서는 여전히 조금 퍼지다. 나는 문서들을 완전히 읽도록 할 것이다. – Barguast