컴퓨터 공학

👉 [네트워크] 나는 왜 SocketIO 대신 Websocket 서버를 구축하였는가?

bitcodic 2021. 1. 12. 15:18

현재 실시간 문서 협업 기능과 채팅 시스템 도입을 진행 중이다.

 

HTTP 한계상 실시간에는 어울리지 않고, 이를 통한 오버헤드 또한 결국 트래픽 비용이므로

 

Websocket 활용한 클라이언트-서버 시스템을 구축해야 한다.

 

Flask 로 진행중이므로 해당 스펙에 맞는 적절한 라이브러리를 찾아야 했다.

 

SocketIO 가 꽤 인기있는 라이브러리이지만 결론적으로 선택하지 못했다.

 

SocketIO는 WebSocket + HTTP (polling , long-polling ...) 을 결합한 것으로 WebSocket을 미지원하는 브라우저의 경우 HTTP 로 폴링한다고 한다.

 

그러나, SocketIO 공식 문서에 보면 다음과 같이 나와있다.

웹소켓을 활용하나 결국엔 SocketIO 만의 추가 메타 데이터가 필요하다고 한다. 물론 이게 어느정도인지는 안써있다.

 

stackoverflow.com/questions/10112178/differences-between-socket-io-and-websockets

 

Differences between socket.io and websockets

What are the differences between socket.io and websockets in node.js? Are they both server push technologies? The only differences I felt was, socket.io allowed me to send/emit messages by

stackoverflow.com

여기 답변에 따르면 한사람이 SocketIO vs Websocket 퍼포먼스를 비교했는데 꽤 차이가 있다.

 

 

더불어, 현재 클라이언트인 Flutter 자체에서 Websocket 클라이언트 기능을 지원하고 있다. 이를 활용하는게 github에 누군가 올려놓은 SocketIO For Flutter 보다는 공신력(=안정적)있다.

 

문제는 SocketIO 서버는 WebSocket 클라이언트를 받지 못한다고한다(위에 사진 4번째 줄 참조).

 

따라서 직접 Websocket 라이브러리로 서버를 구축하고, Flutter 로 직접 연결하는 수 밖에 없는 것 같다. 20000