HTTP 프로토콜을 사용해서 통신하는 웹에서 HTTP 보다 더 발전된 통신을 하기 위해 만들어진 프로토콜.
HTTP 기본 포트와 같은 포트를 사용할 수 있고, HTTP 업그레이드 헤더를 사용하여 웹소켓 프로토콜로 변경한다. 무려 IE 10도 지원하는 은근 범용성이 있는 기술이다.
socket.io를 사용하여 웹소켓을 이용하는 모습
DUXIT 프로젝트에서는 HTTP 통신 대신 WebSocket, 그리고 웹 소켓 라이브러리인 socket.io를 사용해서 통신을 구현했다.
HTTP 통신은 클라이언트에서 서버로 요청을 보냈을 때만 통신을 할 수 있다. 서버에서 원할 때 데이터를 보낼 수 없기 때문에 클라이언트에서 지속적으로 통신을 보내는 방식을 사용해야 했다. 웹 소켓은 서버와 클라이언트 모두 원할 때 데이터를 보낼 수 있다.
HTTP 통신은 stateless라서 누가 요청을 보냈는지 따로 구현을 해 줘야 한다. 하지만 웹 소켓은(적어도 코드 상으로는) 누가 보냈는지 검사 할 필요 없이 사용자의 정보가 유지되어 편리하다
웹 소켓 프로토콜이 발전된 방식이라고 해도 직접 쓰기에는 사소하게 불편한 점이 있었다. 메세지를 보낼 때에도 JSON.stringify를 사용해서 문자열로 바꿔줘야 하거나 bufferedAmount를 신경써야 하는 부분이 있다. socket.io를 사용하면 이러한 부분을 직접 코드로 작성하지 않아도 된다.
우리는 게임을 만들었기 때문에 여러 소켓을 하나의 그룹으로 묶는 기능이 필요했다. socket.io에서는 room이라는 개념을 도입해서 같은 room의 모든 사람들에게 메세지를 보내거나 할 수 있었다. 또한 disconnect 감지를 지원해서 연결이 끊어짐도 쉽게 알 수 있었다.