2012-07-11 6 views
2

주기적으로 (각 4 초) 서버 위치를 업데이트하여 새 위치로 보내는 클라이언트가 있습니다. 또한 이전 모바일을 추적하고 주기적으로 서버에 꽃가루를 치며 (5 초마다) 클라이언트에게 최신 위치를 알려주는 클라이언트가 있습니다.signalR overhead

이 통신은 SignalR (최신 위치 전송 용) 또는 타이머를 사용하여 수행해야합니까? 나는 SignalR이 매우 큰 비용이 될 수있는 더 큰 요청 크기를 생성하는 약간의 오버 헤드를 가지고 있기 때문에 이것을 말하고있다.

답변

10

HTTP 통신이 나는 당신의 설명을 이해하는 것을 기반으로, 지금

승리, 감사 라이언 여러 갱신 게시물을하고있는 다음 리스너는 폴링 GET 요청을 사용하고 있습니다. 이것들은 헤더와 별도의 HTTP 요청의 오버 헤드를 가지며, keep-alive를 사용하지 않거나 keep-alive timeout을 초과하면 TCP 연결을 설정합니다. SignalR을 사용

대신, 최소한에,에 수 SignalR는 하나의 HTTP GET 요청을 통해 복수 응답을 다시 깔때기 것 폴링을 사용하고 그것을 할 수 있기 때문에 사물의 폴링 GET 측을 향상시킬 수 항상 4 초의 지연 시간을 갖는 것이 아니라 "실시간"입니다. 거기에서 클라이언트 및 서버 기능에 따라 완전하게 손상된 웹 소켓에 SSE (Server Sent Events)를 통해 작업 할 수 있습니다. 이러한 접근 방법 중 어느 것도 현재 설명 된 구현보다 더 효율적이어야합니다.

요청의 크기는 각 SignalR 메시지 주위에 작은 "봉투"있다

승리. HTTP 헤더와 비교할 때 브라우저 클라이언트는 각 업데이트 POST와 함께 보내고 GET을 폴링해야만합니다. 이제는 SignalR이 쉽게 이길 것입니다. 분명히 메시지의 페이로드는 두 경우 모두 동일한 JSON이 될 것이므로 세척해야합니다.

프로그래밍 모델은

가 가장 중요한 것은, 내가 SignalR 당신에게 정확한 기본 기술을 사용하고 결국 어떤에서 당신을 추상화와 가진보다는 일관성있는 실시간 통신 API 당신을 선물 프로그래밍 모델을 제공하여, 생각 승리 궁극적으로 연결이 끊어진 요청/응답 모델로 썽킹하는 것에 대해 걱정할 필요가 없습니다.

+0

응답을 기다리는 동안 서버 쪽에서 연결을 열어 두는 서버 쪽 오버 헤드는 무엇입니까? 예를 들어 브라우저 탭을 사이트에서 열어두고 1 주일 후에 사용하지 않은 사용자도 있습니다. 나의 이해 (제한적 임)는 자동적으로 닫힌 연결을 재개합니다. 따라서 이것은 서버 측에서 엄청난 수의 연결 일 수 있습니다. 논증 적이 되려하지 않고, 이것에 대한 당신의 통찰력을 찾고 있습니다. 감사합니다 :) – AaronLS

+1

최신 비트로 확장 성 번호를 보려면 빌드 (아래 링크)의 SignalR 대화를 시청하십시오. 그러나 컴퓨터 당 수십만 번까지 확장 가능합니다. 이유는 모든 비동기 I/O 때문이며, 따라서 전달해야 할 것이 없을 경우 낭비되는 주요 자원은 없습니다. http://channel9.msdn.com/Events/Build/2012/3-034 –