SignalR의 통신 기술에는 4가지가 있다.
- WebSocket
- Server-sent event(Event Source-SSE) [IE 제외]
- ForeverFrame [IE 전용]
- Long Polling
signalR은 서버와 클라이언트의 가용성 안에서 최적의 전송 방식을 "자동"으로 선택한다.
선택하는 순서는 1->4다. WebSocket 되니? 안되면... 다음 ..다음.. 이런 형식이다.
먼저, WebSocket에 대해 알아보겠다.
[WebSocket] - RealTime
- Client측에서 Server로 websocket을 요청함.
- Server는 그것을 받아들이고 HTTP 프로토콜을 전송함.
- 그러면 이제 둘 사이에 웹소켓 연결이 이루어지고, 그전에 건과는 달리 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
- Client(JS)에서 new EventSource(…)를 Server로 전송함
- 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
- Client 가 Server로 Request를 날림
- Server에서 Event가 발생하고 그 정보를 Client쪽으로 Response해줌
- Client가 다시 Server에게 Request를 날림
이런게 반복되는 형태
Client Server
=================Request============⇒
=================Request============⇒
=================Request============⇒
<=============Response===============Event
Client가 계속 Server에 내가 요청한거 다됐어??다됐어?? 물어보다가 Server가 다되면 그때 응답해주는 그런 형식임.
SSE와 비슷한데 둘의 차이점이 있다면, SSE는 Long Polling 과 달리 연결을 닫지 않는다.
LongPolling 도 비동기임.
request를 보내서 response를 받는 부분이 끝날때까지 Client쪽은 계속 돌아감 (Ajax 에서 서버 요청 기다리는 동안 우리가 계속 다른거 볼 수 있는 것처럼) 그러다 정보 받고, 이제 새로운 request보낼때 또 새로 쭉…
Ajax와 Long Polling의 차이점
- Ajax : 요청을 보냈을때 현재 시점에 바로 답을 해줌. ex) 야 , 너 돈 있냐? Ajax : 아니 없어!
- Long Polling : 요청을 보냈을때 될때까지 기다렸다가 답을 줌.ex) 야, 너 돈 있냐? Long Polling : 잠시만… (대기) 여기!
여기까지 signalR이 사용하는 통신기술 4가지를 알아보았다.
다음 챕터에서는 이 통신기술로 통신을 어떻게 하는지 알아보겠다!
'ASP.NET CORE' 카테고리의 다른 글
[Error 413.1] The page was not displayed because the request entity is too large. 에러 해결법 (0) | 2022.08.18 |
---|---|
[SignalR] SignalR의 정의 및 기능, 특징 (0) | 2022.06.30 |