본문 바로가기

ASP.NET CORE

[SignalR] SignalR의 통신 기술 4가지

SignalR의 통신 기술에는 4가지가 있다.

  1. WebSocket
  2. Server-sent event(Event Source-SSE) [IE 제외]
  3. ForeverFrame [IE 전용]
  4. Long Polling

signalR은 서버와 클라이언트의 가용성 안에서 최적의 전송 방식을 "자동"으로 선택한다.

선택하는 순서는 1->4다. WebSocket 되니? 안되면... 다음 ..다음.. 이런 형식이다. 

 

먼저, WebSocket에 대해 알아보겠다.

 

[WebSocket] - RealTime

  1. Client측에서 Server로 websocket을 요청함.
  2. Server는 그것을 받아들이고 HTTP 프로토콜을 전송함.
  3. 그러면 이제 둘 사이에 웹소켓 연결이 이루어지고, 그전에 건과는 달리 Client가 Server로 Server가 Client로 메세지 전송이 자유로워짐 (양방향 통신)

간단히 말하면, 클라이언트가 너.. 웹소켓 통신 됨?? 이라고 묻고 서버가 ㅇㅇ 됨 하면 서로 연결되는거임.

  Client                                                                      Server

============upgrade:websocket============⇒

<=========HTTP/1.1 101 Switching Protocols ====

<==============message=================⇒

 

101 Switching Protocols : Handshake 요청 내용을 기반으로 다음부터 WebSocket으로 통신 가능하게함.

 

Web Socket의 특징들

  • Persistent connection : 지속적인 연결
  • multi User : 여러명의 유저
  • Full duplex : 서버에서 클라이언트로 클라이언트에서 서버로 데이터 전송하는게 동시에 일어남
  • Asynchronous : 비동기

[Server-sent events : SSE] - RealTime 

  1. Client(JS)에서 new EventSource(…)를 Server로 전송함
  2. Server에서 Event를 통해 Message를 계속 Client쪽으로 전송함.

Client                                                                  Server

=========new EventSource(…)============⇒

<=============message===============Event

<=============message===============Event

<=============message===============Event

 

SSE의 특징

  • Asynchronous : 비동기
  • Not Full duplex : One way : 단방향 통신임

[Forever Frame] 

Forever Frame = iFrame

iFrame

  • html에서 다른 서버 연결할때 씀.
  • url로 서버 통신
  • 처음 연결되면 클라이언트의 요청없이 클라이언트쪽으로 보낼 수 있음.(Server push)

단점

  • 많은 Ram을 차지할 수 있다. 메모리 문제
  • 클라이언트가 iframe을 지원해야함.
  • 단방향 연결 (Server to client) 서버에서 데이터 푸시할땐 괜춘함

[Long Polling] - Kind Real Time

  1. Client 가 Server로 Request를 날림
  2. Server에서 Event가 발생하고 그 정보를 Client쪽으로 Response해줌
  3. Client가 다시 Server에게 Request를 날림

이런게 반복되는 형태

Client                                                                   Server

=================Request============⇒

=================Request============⇒

=================Request============⇒

<=============Response===============Event

 

Client가 계속 Server에 내가 요청한거 다됐어??다됐어?? 물어보다가 Server가 다되면 그때 응답해주는 그런 형식임.

SSE와 비슷한데 둘의 차이점이 있다면, SSE는 Long Polling 과 달리 연결을 닫지 않는다.

 

LongPolling 도 비동기임.

request를 보내서 response를 받는 부분이 끝날때까지 Client쪽은 계속 돌아감 (Ajax 에서 서버 요청 기다리는 동안 우리가 계속 다른거 볼 수 있는 것처럼) 그러다 정보 받고, 이제 새로운 request보낼때 또 새로 쭉…

Long Polling&nbsp; 통신

Ajax와 Long Polling의 차이점

  • Ajax : 요청을 보냈을때 현재 시점에 바로 답을 해줌. ex) 야 , 너 돈 있냐? Ajax : 아니 없어!
  • Long Polling : 요청을 보냈을때 될때까지 기다렸다가 답을 줌.ex) 야, 너 돈 있냐? Long Polling : 잠시만… (대기) 여기!

여기까지 signalR이 사용하는 통신기술 4가지를 알아보았다.

다음 챕터에서는 이 통신기술로 통신을 어떻게 하는지 알아보겠다!