webSocket 이전에는 실시간 통신을 위해 http request에 트릭을 사용하여 실시간인 것처럼 작동하게 하는 기술을 사용함
http
프로토콜 자체가 클라이언트에서 서버로의 단방향 통신을 위해 만들어진 것이다.
클라이언트가 평범한 http request를 서버로 계속 날려서 이벤트 내용을 전달받는 방식
http request connection
을 맺고 끊는 것 자체가 부담이 많은 방식이다 클라이언트에서 서버로 일단 http request를 날린후 기다리다가
서버에서 해당 클라이언트로 전달할 이벤트가 있다면
그 순간 response 메시지를 전달하면서 연결이 종료된다
차세대 비동기 통신 방식이다
- 정식으로 클라이언트 서버 간 양방향 통신이 가능하게 하기 위해서 HTML5 표준의 일부로 webSocket이 만들어졌다.
- 웹페이지와 서버 간에 양방향 통신을 위해 만들어진 스펙이다.
- 싱글 TCP 소켓에서 통신이 이뤄진다
ws
(unsecure),wss
(secure) protocol을 사용한다- 모든 종류의 클라이언트, 서버에서 사용가능하다
최초 접속이 일반 http request를 통해 handshaking과정을 통해 이루어진다는 점이다
STOMP (Simple Text Oriented Messaging Protocol)은 메세징 전송을 효율적으로 하기 위해 탄생한 프로토콜
- STOMP 프로토콜은 WebSocket 위에서 동작하는 프로토콜로써
클라이언트와 서버가 전송할 메세지의 유형, 형식, 내용들을 정의하는 매커니즘이다.
- 기본적으로
pub
/sub
구조로 되어있기에 메지시 전송 부분, 메시지 처리 부분이 확실하게 정해져있다- STOMP를 이용하면 메세지의 헤더에 값을 줄 수 있어 헤더 값을 기반으로 통신 시 인증 처리를 구현가능하다
- TCP 또는 WebSocket과 같은 양방향 네트워크 프로토콜 기반으로 동작한다
- STOMP는 HTTP 에서 모델링되는 Frame 기반 프로토콜이다
STOMP는 Publish-Subscribe 매커니즘을 제공한다
pub
/ sub
는 메시지 공급 주체와 메시지 소비 주체를 분리해 제공하는 메시징 방법이다우체통 = Topic
집배원 = Publisher
구독자 = Subscriber (다수가 될 수 있다)
- 채팅방 생성 :
pub
/sub
구현을 위한 Topic을 생성한다- 채팅방 입장 : Topic에 구독한다
- 채팅방에 메시지 송수신 : 해당 Topic으로 메시지를 송신(pub), 수신(sub)한다
클라이언트는 메시지를 전송할때 SEND
, SUBSCRIBE
, COMMAND
요청 프레임를 사용할 수 있다
STOMP는 Broker를 통해 타 사용자들에게 메세지를 보내거나 서버가 특정 작업을 수행하도록 메세지를 보낼 수 있게 된다.
실시간 웹 어플리케이션 통신을 위한 자바스크립트 라이브러리이다
- 서버 :spring을 이용해서 STOMP 규격으로 개발
- 클라이언트 : android와 IOS에서는 개인 개발자들이 만들어놓은 stomp 규격의 클라이언트 라이브러리를 이용하여 서버에 접속