2014-03-13 4 views
4

signalr 및 asp.net mvc 4를 사용하여 채팅 응용 프로그램을 개발 중입니다. 사용자가 처음 추가 한 경우 - 연결 ID가 할당되고 다른 클라이언트와 채팅하지만 그의 페이지를 새로 고침하고 새로운 연결 ID를 할당합니다.SignalR 브라우저 새로 고침시 연결 ID 유지 보수

제 질문은 브라우저 새로 고침시 사용자의 연결 ID를 어떻게 유지합니까?

도움이 될 것입니다.

답변

1

처음으로 사용자를 추가하는 경우 세션에 저장 한 연결 ID 또는 페이지가 해당 시간대를 새로 고치면 특정 정적 변수가 할당됩니다. 현재 ID를 전달하지 않으면 세션 변수가 비어 있거나 없습니다

if(Session["id"] != null) 
{ 
    -- use last added id 
} 

나는 이것이 당신을 도울 수 있다고 생각합니다.

0

DB 또는 캐시를 통해 지속성을 추가합니다.

내 솔루션에서 DB를 통해 대통령직을 추가했는데 각 세션마다 고유 한 식별자가 지정되었습니다.이 식별자는 signalR 그룹으로 취급되며 각 브라우저 새로 고침시 클라이언트는 해당 고유 식별자로 등록하고 새로운 연결 ID를 그룹 이름 인 동일한 고유 식별자로 변경하십시오. 클라이언트에게 메시지를 보내는 것은 그룹을 통해 수행됩니다.

_signalrDispatcher.Clients.Groups("group name").SendData(data); 
0

answer에서는 connectionIds를 관리하는 방법에 대해 설명했습니다. 질문은 구체적 이었으므로 요약 할 것입니다.

OnConnectedOnReconnected 사용자에게 connectionId (추가 정보가 있으면 grup 정보 포함)를 추가하고 connectionId 고유성 (한 사용자는 동시에 많은 connectionIds가 있음)을 확인하십시오.

OnDisconnected 해당 연결 ID가있는 레코드/행을 삭제하십시오. 사용자가이 그룹에 레코드가 없으면 사용자가 그룹을 나갔다는 의미입니다. 사용자가 기록을 전혀 남기지 않으면 사용자가 연결을 끊었다는 의미입니다.

이 레코드를 유지하려면 공유 저장소를 사용해야합니다. 인스턴스가 두 개 이상인 경우 동일한 데이터를 공유해야하기 때문입니다. 데이터베이스를 사용하는 것이 좋지만 캐시 또는 세션을 사용할 수 있습니다 (redis처럼 공유 된 경우).

이 도움이 되었기를 바랍니다.

관련 문제