Socket.IO란 무엇인가?

- Socket.IO는 서버와 클라이언트가 저지연시간, 양방향 및 이벤트 기반 통신을 가능하게 해주는 라이브러리이다
- http는 일반적으로 양방향 통신이 불가능하다. 그래서 polling, long-polling, WebSocket 등을 사용하여 양방향 통신이 가능한 것 처럼 구현할 수 있다
- Socket.IO는 long-polling 방식을 사용하고 있다
polling vs long-polling vs WebSocket
polling
- 클라이언트에서 주기적으로 서버에 데이터를 요청한다
- 클라이언트에서 요청이 오면 서버에서는 변경이 없거나 새로운 데이터가 없더라도 응답을 보낸다
- 주기적으로 정해진 시간 마다 데이터를 확인할 수 있는 장점이 있지만 불필요한 요청이 많아질 수 있어 오버헤드가 과도하게 발생할 수 있는 단점이 있다
long-polling
- 클라이언트에서 요청을 보내면 서버에서는 이벤트가 발생했을 떄 응답을 보낸다
- 서버에서 변경 사항이 있을 때에만 응답을 보내기 때문에 polling 방식보다 불필요한 요청이 덜 발생하는 장점이 있다
- 하지만 클라이언트가 서버 응답을 무한정 기다리지는 않고 일정 시간이 지나면 새로운 요청을 보낸다
- 따라서 서버에서 응답을 받았을 때 클라이언트가 즉시 요청을 다시 보내면서 연결이 영구적인 것 처럼 보이도록 구현이 된다
WebSocket
- 클라이언트가 요청을 최초 한 번만 보낸다.
- 재요청을 보내지 않아서 오버헤드가 적고 효율적일 수 있다
- 그러나 필요 이상으로 연결을 오래 유지하게 되면 서버 CPU에 부담이 발생할 수 있는 단점이 있다
Socket.IO는 왜 만들어 졌을까?