http를 쥐어짜서 마치 통신하는것처럼 느끼게 만들 방법이 있을까?
COMET
- request없이 서버에서 데이터를 밀어넣어주는 기술을 통칭한다.
- 우리가 주식차트를 볼 때 서버에서 차트로 주식 거래량과 가격을 항상 밀어넣어주는 기술이다.
😎 클라이언트
"니가 언제 무슨말을 하고 싶을지 모르니 나는 10초마다 네 방문을 두드릴 것이다"
😎 클라이언트
"그쪽이 대답할 때 까지 time out 되는 한이 있더라고 기다릴겝니다 상궁"
😎 서버
"에잇 이것도 먹어라"
참고자료
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=fromyongsik&logNo=220167987770
🙄 그 이전에 만든 서비스는...?
옛날 기술로 만든 서비스에서도 웹소켓처럼 실시간 통신을 동작하게 해주는 socket.io, SockJS가 있어!
(밑에서 더 알아보자)
이들은 websocket, ajax long polling, multipartstreaming etc 을 하나의 api로 추상화해주지.
다시 말해, 브라우저와 웹 서버의 종류와 버전에 따라 가장 적합한 기술이 구현체가 되게 하는 방식이야!
1. 커넥션 맺기
🤩 client
최초 연결 시 다음과 같이 http로 웹 서버에 요청한다
(우리는 이걸 HandShake라 읽죠. 맞습니다. 3-Way Handshake에 그 쉐이크)
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
🥳 server
웹 소켓 연결 성공!
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
완전 양방향 통신
자, 이제 서로는 메세지를 보내며 통신하는데, 이 메세지는 프레임(Frame) 단위로 이루어진다.
연결 종료
누구든 먼저 연결을 종료할 수 있다.
종료를 원해요? Close Frame을 던지세요~~
참고자료
https://hudi.blog/websocket-with-nodejs/
https://swiftymind.tistory.com/104
polling the server for change?
➡️ If a client wishes to know when something new is available, it must periodically send a request to the API to check for data modifications.
This pattern is the POLLING!