Websocket 이 필요한 이유
Historically, creating web applications that need bidirectional communication between a client and a server (e.g., instant messaging and gaming applications) has required an abuse of HTTP to poll the server for updates while sending upstream notifications as distinct HTTP calls [RFC6202].
This results in a variety of problems:
o The server is forced to use a number of different underlying TCP connections for each client: one for sending information to the client and a new one for each incoming message.
o The wire protocol has a high overhead, with each client-to-server message having an HTTP header.
o The client-side script is forced to maintain a mapping from the outgoing connections to the incoming connection to track replies
카카오톡 메신저나 게임 상황을 생각해보면 양방향 통신이 필요한 이유가 납득이 된다. 단방향 통신 (req, res) 인 http 로 구현을 한다면 요청을 보내야 응답이 가능하다. 하지만 양방향 통신에서는 요청을 하지 않아도 응답이 가능해진다. 이것이 양방향 통신의 의의다. 이러한 점에서 양방향 통신은 실시간 데이터가 필요할 때 유용하게 쓰인다.
(카카오톡 메신저 예시 : http로 구현을 한다면 유저는 계속 request (새로운 메세지 없어요? ) 를 보내야 한다. 그러다가 얻어 걸리면 새로운 메세지를 받는 셈이다. 하지만 websocket로 구현을 한다면 request를 보내지 않아도 새로운 메세지가 오면 받아볼 수 있다.)
여러 개의 Websocket 통신을 할 수 있나요?
네. 가능합니다. tcp/ip 위에서 동작하는 websocket은 여러 개의 websocket connection 를 유지할 수 있습니다.
여기서 의문인건 이미 client (port 3000) 은 이미 server (port 8080) 과 이미 handshake를 했다. 다른 웹페이지에서 client 를 열어서 또 다시 handshake를 한다면? 이전의 것은 없어질 것인가?
실험
1. graphiql 를 클라이언트로 subscribe websocket 요청을 하나 보낸다.
2. 또 다른 탭을 열어서 같은 websocket 요청을 보낸다.
일단 착각한건 websocket 클라이언트 포트는 react port 3000과 상관없다. 브라우저 80 port 에서 리액트 3000 port 로 접속을 했을 뿐!
browser 안에서는 두 개의 connection이 생기고 각각 다른 port가 열린다. 우리의 실험에서는 그게 65181, 65183 port 이다. 이렇게 여러 개의 websocket connection 이 관리되는 것이다.
참고
'💻Computer Science > Network' 카테고리의 다른 글
[Network] 암호화와 https 이해하기 (0) | 2023.07.25 |
---|