개요
socket.io의 공식 문서를 읽으며 알게 된 특징과 장단점을 기술해보려 합니다. 왜 web socket이 아닌 socket.io를 사용해야 하는지, socket.io는 어떤 환경에 적합한지 알아보겠습니다.
본문
1. Socket.io 와 Web socket은 다르다
- socket.io는 web socket의 구현체가 아니다. 웹 소켓도 이미 구현체이고, 이에 추가적인 기능을 가진 개체가 Socket.io이다.
- web socket과 다르게 socket.io는 Acknowledgement, connection recovery, event 단위 처리 등이 가능하다는 장점이 있다.
2. socket.io는 백그라운드 프로그램에 어울리지 않다.
- 지속적으로 open TCP 연결을 해야 하기 때문에 모바일에선 높은 배터리 사용이 요구된다.
- 때문에 백그라운드 프로그램이 실시간 알림이 필요하면 socket.io가 아닌 FCM을 사용하는 것이 추천된다.
3. socket.io는 웹소켓에 연결 되면 처음에 HTTP 요청으로 TCP Handshake 이후 해당 세션을 HTTP에서 Web socket으로 업그레이드 한다.
- 업그레이드 하며 더이상 HTTP header를 통신 시 보내지 않아 overhead를 완전히 줄이며, 단순히 42['hello', 'world']와 같은 형식의 비교적 짧은 문자열만 보낸다.
- 42는 socket.io 와 engine 정보를 지니고, 뒤 문자열은 이벤트 명과 데이터를 담는다.
4. Acknowledgement로 기존 API 방식과 동일하게 응답을 줄 수도 있다.
- Acknowledgements는 클라이언트와 서버 간의 이벤트가 성공적으로 수신 되었는지 확인하기 위해 사용됩니다. 요청과 응답의 형식은 다음과 같습니다.
Sender
socket.emit("hello", "world", (response) => {
console.log(response); // "got it"
});
Receiver
socket.on("hello", (arg, callback) => {
console.log(arg); // "world"
callback("got it");
});
참고 자료
Acknowledgement
https://socket.io/docs/v3/emitting-events/#acknowledgements
Advantage of Socket.io
https://socket.io/docs/v4/#what-is-the-overhead-of-the-socketio-protocol
Overhead of Socket.io
https://socket.io/docs/v4/#what-is-the-overhead-of-the-socketio-protocol
High battery drain
https://socket.io/docs/v3/#what-socketio-is-not
'개발 일지' 카테고리의 다른 글
socket.io 서버 소켓에서 연결된 클라이언트 소켓 ID와 입장한 room을 찾는 방법 (0) | 2024.08.02 |
---|---|
Socket.io이란? 웹 소켓과의 차이점은? (0) | 2024.07.19 |
스타트업 취업 4주차 후기(SI는 어떨까?) (2) | 2024.04.11 |
API 명세서 작성 규칙(convention) (2) | 2024.02.12 |
[PA] User 관련 ERD 설계 (0) | 2024.02.01 |