websocket, socket.io
websocket이란?
- 브라우저의 화면을 바꾸기 위해 보통 새로고침을 해야한다.
- 새로고침 없이 화면을 바꾸기 위해 사용하는것이 바로
websocket
이다.
- 페이지 이동없이 페이지 내부만 새로고침하는
Ajax
라는 기술도있지만 Ajax
도 결국 HTTP
를 이용하기 때문에 요청을 보내야 응답이 온다.
- 새로고침을 위해 버튼을 누른다거나, 주기적으로 서버에 요청을 보낸다면 번거로울 뿐더러 자원 낭비를 하게된다.
websocket은 서버와 클라이언트가 실시간으로 양방향 통신을 할 수 있게 해주는 프로토콜이다.
socket.io란?
websocket이 양방향 소통을 위한 프로토콜이라면, socket.io는 양방햔 통신을 하기 위해 websocket 프로토콜을 사용하는 라이브러리이다.
websocket의 장단점
- 장점: 적은비용, 낮은 복잡도, 빠름
- 단점: 지원하지 않는 브라우저가 다수 존재
socket.io의 장단점
- 장점: 새로운 사람이 채팅방에 들어왔음을 연결된 모든 사용자들에게 한번에 알려야하는 경우
socket.io
는 연결된 모든 클라이언트에 메세지를 브로드캐스팅 할 수 있지만, websocket
은 연결된 사용자들의 리스트를 받아와 한명씩 메시지를 보내야한다. 또한, 소켓 연결 실패 시 socket.io
는 fallback을 통해 다른 방식으로 알아서 reconnect하지만 websocket
은 reconnect를 시도하지 않는다.
- 단점 : 많은 비용, 자원, boilerplate 코드
** boilerplate 코드란? 변화없이 여러군데에서 반복되는 코드
빠르게 적은 비용으로 많은 데이터를 처리하는 경우에는 websocket을 사용하고, 연결된 클라이언트들을 세밀하게 처리하고 Broadcasting 기능이 필요한경우에는 socket.io를 쓰는게 좋다.
webrtc
- WebRTC(Web Real-Time Communication)는 브라우저와 서버가 통신하는게 아니라, 브라우저끼리 통신하여 중간자인 서버없이 브라우저 간에 오디오, 영상 미디어, 데이터 등을 교환할 수 있도록 하는 기술이다.
websocket도 영상을 주고 받을 수 있는데 webrtc를 사용하는 이유
- webrtc는 영상, 오디오, 임의의 데이터의 통신이 high-performance, hight-quality 이도록 설계됨
- webrtc는 브라우저간 직접 통신이어서 훨씬 빠름
- webrtc의 지연시간이 훨씬 짧다(low-latency)
webrtc도 websocket을 사용할까?
- P2P 연결을 통해 직접 통신하지만 심각한 부하를 다룰 수 있기 때문에 websocket 혹은 socket.io를 사용하는 Signaling 서버가 필요하다.
참조:
websocket vs webrtc 비교정리!