SignalR은 어떻게 내부적으로 작동합니까?


160

누구나 SignalR이 내부적으로 어떻게 높은 수준으로 작동하는지 알려줄 수 있습니까?

나는 그것을 사용하여 데이터를 플러시하고 Response.Flush클라이언트 측에서 일정한 간격으로 Ajax 요청을 보내고 있다고 생각합니다. 맞습니까?


13
@dfowler 매우 유익했다 최근 스콧 Hansleman과의 인터뷰했다 hanselminutes.com/291/...을 .
정렬

1
신호 r 아키텍처 및 작동 방식에 대한 좋은 기사 lostechies.com/erichexter/2012/11/05/… asp.net/signalr/overview/getting-started/…
Mahesh

나는 오래 전에 알고 있지만 microsoftvirtualacademy.com/Content/…
lordkain

1
또한 David Fowler와 Damian Edwards의 NDC 2013에서 'ASP.NET SignalR로 커버 아래'라고 불리는이 프레젠테이션을 통해 라이트 버전의 SignalR을 무대에서 생중계합니다. 매우 유익합니다. 2.0 이전 버전이지만 그다지 중요하지 않습니다. vimeo.com/68383353
Johan B

답변:


241

아니요, SignalR은 연결을 통한 추상화입니다. 해당 연결을 통해 두 가지 프로그래밍 모델 (허브 및 영구 연결)을 제공합니다. SignalR에는 전송 개념이 있으며 각 전송은 데이터의 송수신 방법과 연결 및 연결 해제 방법을 결정합니다.

SignalR에는 몇 가지 내장 전송이 있습니다.

  1. 웹 소켓
  2. 서버가 보낸 이벤트
  3. 영원히 프레임
  4. 긴 폴링

SignalR은 서버와 클라이언트가 지원하는 "최상의"연결을 선택하려고합니다 (특정 전송을 사용하도록 강제 할 수도 있음).

그것은 높은 수준입니다. 각 전송이 어떻게 구현되는지 보려면 소스 코드를 살펴보십시오 .

각 전송에 대한 클라이언트 코드도 있습니다. https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

특히 긴 폴링 전송 작동 방식에 대해 문의하는 경우 :

신호가 응답하기 위해 비동기식으로 대기중인 서버로 아약스 요청을 보냅니다. 신호가 있거나 요청 시간이 초과되면 서버에서 반환되어 다른 요청을 보내고 프로세스가 계속됩니다. (클라이언트가 메시지를 놓치지 않도록 클라이언트가 확인한 내용을 추적하는 방법에 대한 세부 정보를 남겼습니다)

잘하면 그것은 대부분의 질문에 대답합니다.


3
한 번에 몇 개의 연결을 지원할 수 있는지 알려줄 수 있습니까?
Farhad-Taran

1
Signalr가 지원할 연결 수는 IIS의 요청 제한에 따라 다릅니다. 구성 항목 또는 쉘 스크립트를 사용하여 증가시킬 수 있습니다. 일반적으로 Signalr는 메모리에 1000 개의 연결을 캐시합니다.
Thanigainathan

1
이미 언급했듯이, 제한 랠리는 서버 수준입니다. Damnien Edwards (SignalR의 공동 제작자)는 단일 10GB 서버에서 150,000 개의 연결을 얻었습니다. twitter.com/DamianEdwards/status/486642486350061568
LDJ

이 질문에 대한 답변 stackoverflow.com/q/40906789/3565879
Technacron

@davidfowl 이것에 대한 답을 적어주세요 stackoverflow.com/questions/47504489/...
Hitesh Thakor에게

5

@davidfowl은 이미 주요 부분에 답변했습니다. 그러나 전송 동작의 차이, 특히 WebSocket과 다른 전송 간의 차이점에 대한 자세한 정보를 제공합니다. 아래는 몇 가지 사항입니다.

  • WebSocket은 클라이언트와 서버간에 진정한 지속적인 양방향 연결을 설정하는 유일한 전송입니다. 그러나 WebSocket은 IIS 8 이상과 최신 버전의 Internet Explorer, Chrome 및 Mozilla Firefox에서만 지원됩니다.
  • Server Sent Events, Forever Frame 및 Long polling 동안 세 가지 모두 단방향 통신을 따르며 대부분의 브라우저에서 지원됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.