2013-03-21 3 views
15

우리는 속성을 다른 시간을 지정이 링크를 통해 왔습니다. SignalR 시간 초과 속성

그냥 위의 포스트에서 서로 다른 상황을 다시 반복 : 클라이언트가 오프라인 뒤 잠시 후 연결을 회복 갈 때

는 "A 허브 재 연결이 발생 SignalR 구성 값이 크게 때문에 다음 예제의 타임 스탬프를 결정합니다. 그대로 시간을 고려하지 않는

을 여기에 몇 가지 예와 그 결과 (시간 형식 m : SS)입니다. 다시 연결 동작을 포함 :

상황을 1

0시 0 - 클라이언트 연결

을 차릴 - 클라이언트 인해 ISP 문제로 연결이 끊어 (그리고 연결이 끊어 실현)

0시 15분를 - 클라이언트, OnConnected이

0시 10분

을 트리거 서버에 연결

0:16 - OnReconnected 이벤트가

상황이

0:00 트리거 - 클라이언트는 서버, OnConn에 연결 클라이언트 연결을

두 가지가 여기에 일어날 수

을 차릴 - 클라이언트 인해 이더넷 케이블 (이 끊어있어 실현하지 않습니다)

0시 15분를 당기에 연결이 끊어진 - 반사 된이

0시 10분

를 트리거

A : 0시 16분는 - 아무런 반응이 없습니다 및 클라이언트가 이전 연결

B에 계속 : 0 ~ 45 - 클라이언트가 분리를 실현 *

,

B : 0:46 - 클라이언트가 다시 연결 상태가됩니다.

B : 0:47 - 클라이언트가 성공적으로 다시 연결되고 OnReconnected 이벤트가 트리거됩니다.

상황 3

0:00 - 클라이언트가 서버에 연결, OnConnected이

0시 10분

을 트리거 - 클라이언트 인해 이더넷 케이블을 당기에 연결이 끊어

(이 분리의 실현하지 않습니다)

0 ~ 45 일 - 다시 연결 상태

0으로 클라이언트 전환 - 클라이언트의 연결이 끊어 *

0:46을 실현

1시 15분은 - 서버는 클라이언트가 너무 오래 간 후 약간 나중에 다시 연결하면 수신하는 클라이언트의 "분리"명령을 대기 그것에 대해 잊어 된 것으로 판단한다. ***

1시 15분 - OnDisconnect의 1시 16분 트리거 - 클라이언트가 수행하는 "소프트"(OnReconnected 트리거되지 않습니다) 다시 연결

1시 18분 - 클라이언트 연결

1시 17분 회복 - 클라이언트

1:19 "연결 해제"명령 검색 - 클라이언트가 "중지"를 호출하고 부드러운 분리가 (OnDisconnected 트리거되지 않습니다) 않는에게

상황을 4

클라이언트는 실현 - ~ 45 :

0시 6,이 - - 클라이언트, OnConnected이

0시 10분

을 트리거 서버에 연결 클라이언트 인해 이더넷 케이블을 당기에 연결이 끊어

0 (이 분리의 실현하지 않습니다) 그 *

0:46 분리 - 다시 연결 상태

1:15에 클라이언트 전환은 - 서버는 클라이언트가 너무 오래 간되었다는 것을 결정하고 다음의 "분리"명령을 대기 그것에 대해 잊어 클라이언트가 재 연결되면 수신 할 클라이언트 나중에. ***

1시 15분 - OnDisconnect의 1시 반 트리거 - 클라이언트 ** (너무 오래 노력)

1시 반 다시 연결 시도를 중지 - 연결이 끊긴 상태로 클라이언트 전환을

  • 클라이언트 측 keep alive check로 인해 : keep alives가 없기 때문에 클라이언트가 오프라인 상태 일 때를 결정하는 데 사용됩니다. 긴 폴링 전송에 사용되지 않음

** 클라이언트 측 연결 끊기 시간 초과로 인해 : 클라이언트가 너무 오랫동안 다시 연결되었을 때를 결정하는 데 사용되며 서버가 해당 시간 동안 클라이언트를 잊어 버렸을 가능성이 있습니다

*** 서버 연결 끊김 시간 초과로 인해 : 클라이언트를 잊어 버릴 때를 결정하는 데 사용됩니다. 서버에서 연결이 죽은 것으로 태그 지정되면 시간이 시작됩니다. 궁극적으로 서버는 클라이언트에게 새로운 연결을 시작해야한다는 것을 알려주는 클라이언트의 주제에 대한 연결 해제 명령을 대기열에 넣습니다 (다시 연결하는 경우). 항목이 정리되면 명령이 서버에서 사라집니다."


것은 우리가 찾는 것은 우리가 연결 해제를 얻을이며 .NET SignalR 클라이언트와 ASP.NET MVC SignalR 서버 사이 (위의 1과 2) 자주 다시 연결하고, 또한 초래하지 않는 연결이 끊어 . 재 연결 (3 위 4) 우리는 ServerSentEvents 프로토콜이 사용되고 있음을 알 수

우리가 (증가 또는 감소) 조정할 필요 시간 제한 속성을 알고 하드입니다. 수를 줄

  1. 을 연결을 끊고 다시 연결하십시오.
  2. 상황 3과 4에서 전혀 끝나지 않습니다.

여기서 중요한 점은 .NET SignalR Client는 실제로 서버에 항상 연결되어있는 Windows 서비스입니다. 우리가 사용하는

  • 은 ConnectionTimeout = 1백10초
  • DisconnectTimeout = 30초
  • KeepAlive를 = 30초
  • 또한

:

우리는 현재 단지있는 기본값을 유지 한 SignalR 1.0.1.

답변

6

시간 초과가 올바르게 설정되었습니다. 현재 릴리스에서는 클라이언트가 연결을 유지할 수 있도록 .net 클라이언트에 대한 클라이언트 측 연결 유지가 없습니다.

다음 릴리스에서는 .net 클라이언트 측을 활성 상태로 유지합니다. dev 빌드로 작업하고자한다면 dev 브랜치에서 현재이 기능을 사용할 수 있습니다. https://github.com/SignalR/SignalR/tree/dev.

또한 참조 용으로 다음 내용이 표시됩니다. https://github.com/SignalR/SignalR/issues/741.

+1

감사합니다.이것은 우리에게 어떤 것을 제공합니다. 추신. 내가 클라이언트 측 Keep Alive가 연결 해제에 도움이된다는 것을 확인하자마자 응답으로 표시 할 것입니다. – smitra

+0

하하는 모두 도움이되기를 기쁘게 생각합니다. =) –

+0

안녕하세요, 다시 dev 브랜치에 .NET 클라이언트 측 KeepAlive를 찾을 수 없습니다. 그것은 Connection 클래스의 속성처럼 보이지 않습니다. 내가 찾을 수있는 가장 가까운 KeepAliveData IConnection 인터페이스에서 시간 제한 속성이 있습니다. 이게 우리가 말하는 거라고 생각하니? – smitra

4

SignalR 1.0.1을 사용하고 있습니까? 재 연결 프로세스에 대한 Taylor의 설명은 SignalR 버전> = 1.0 및 JS 클라이언트에 적용됩니다. 내가 묻는 이유는 SignalR> = 1.0에서 KeepAliveDisconnectTimeout의 3 분의 1을 넘지 않아야하기 때문입니다. KeepAliveDisconnectTimeout은 절대 일치 할 수 없습니다.

그러나 1.0. * KeepAlive 다음에 DisconnectTimeout을 설정하면 연결 유지가 DisconnectTimeout의 1/3로 설정됩니다. 귀하의 경우, 이것은 10 초 기본값입니다.

SignalR 1.0에서 많은 문제가 해결되었으므로 업그레이드하지 않을 경우 업그레이드 할 가치가 있습니다. 그러나 다른 답변에서 지적한 바와 같이 .Net 클라이언트는 연결 유지 검사를 지원하지 않으며 네트워크 케이블이 연결될 때까지 케이블이 연결되지 않은 것을 인식하지 못합니다. 1.1

P. 언제든지 연결이 끊어지는 것을 깨닫는 경우 수동으로 Connection을 수동으로 다시 시작할 수 있습니다. 이 시나리오에서는 연결 ID가 물론 변경됩니다.

+0

안녕하세요, 설명해 주셔서 감사합니다. 죄송합니다. 우리는 버전 1.0.1을 언급해야합니다. 원래 질문이 업데이트되었습니다. – smitra

+0

.net 클라이언트에 대해 클라이언트 측 keep keep alive는 1.0.1에서 아직 사용할 수 없습니다. –

7

.NET 클라이언트는 이 아닙니다.은 아직 동작하지 않습니다. 클라이언트가 갑자기 연결을 끊으면 다시 연결되지 않습니다. 그것은 1.1에있을 것이다.

+12

나는 dfowler가이 질문에 관한 프레임 워크를 실제로 작성했기 때문에 사람들이이 답변에 투표하지 않은 이유에 대해 혼란 스럽다 ... –

+3

@david는 2.2에서이 기능을 찾을 수없는 것으로 보인다. – Krazibit312