WebSocket과 STOMP 프로토콜의 주요 차이점은 무엇입니까?
답변
이 질문은 TCP와 HTTP의 차이점을 묻는 것과 유사합니다. 나는 여전히 당신의 질문을 다루려고 노력할 것입니다. 당신이 시작한다면이 두 용어를 혼동하는 것은 당연합니다.
짧은 답변
STOMP는 WebSocket에서 파생됩니다. STOMP는 WebSocket을 사용하여 클라이언트와 서버간에 메시지 프레임을 교환하는 방법에 대한 몇 가지 구체적인 방법을 언급합니다.
긴 답변
WebSockets
클라이언트와 서버 간의 동기식 양방향 통신을 허용하는 사양입니다. TCP 소켓과 유사하지만 스트림 대신 두 당사자간에 가변 길이 프레임을 교환하는 업그레이드 된 HTTP 연결로 작동하는 프로토콜입니다.
스톰프
클라이언트와 서버가 메시징 의미 체계와 통신하는 프로토콜을 정의합니다. 구현 세부 사항을 정의하지 않고 메시징 통합을 위해 구현하기 쉬운 유선 프로토콜을 다룹니다. WebSockets 프로토콜 위에 더 높은 의미를 제공하고 WebSockets 프레임에 매핑되는 소수의 프레임 유형을 정의합니다. 이러한 유형 중 일부는 …
- 잇다
- 구독
- 구독 취소
- 보내기 (서버로 보낸 메시지)
- message (서버에서 보내는 메시지의 경우) BEGIN, COMMIT, ROLLBACK (트랜잭션 관리)
답변
WebSocket 은 메시징 아키텍처를 의미하지만 특정 메시징 프로토콜의 사용을 요구하지는 않습니다. 이것은 바이트 스트림을 메시지 스트림 (텍스트 또는 바이너리)으로 변환하는 TCP를 통한 매우 얇은 레이어입니다. 메시지의 의미를 해석하는 것은 응용 프로그램에 달려 있습니다.
애플리케이션 수준 프로토콜 인 HTTP와 달리 WebSocket 프로토콜에는 프레임 워크 또는 컨테이너가 메시지를 라우팅하거나 처리하는 방법을 알 수있는 수신 메시지에 정보가 충분하지 않습니다. 따라서 WebSocket은 매우 사소한 응용 프로그램에 비해 너무 낮은 수준입니다. 할 수는 있지만 그 위에 프레임 워크를 만들 수 있습니다. 이는 오늘날 대부분의 웹 애플리케이션이 Servlet API 만 사용하는 것이 아니라 웹 프레임 워크를 사용하여 작성되는 방식과 비슷합니다.
이러한 이유로 WebSocket RFC는 하위 프로토콜의 사용을 정의합니다. 핸드 셰이크 동안 클라이언트와 서버는 Sec-WebSocket-Protocol 헤더를 사용하여 하위 프로토콜, 즉 사용할 더 높은 애플리케이션 수준 프로토콜에 동의 할 수 있습니다. 하위 프로토콜을 사용할 필요는 없지만 사용하지 않더라도 응용 프로그램은 클라이언트와 서버가 모두 이해할 수있는 메시지 형식을 선택해야합니다. 이 형식은 사용자 정의, 프레임 워크 별 또는 표준 메시징 프로토콜 일 수 있습니다.
STOMP — 원래 HTTP에서 영감을받은 프레임이있는 스크립팅 언어에서 사용하기 위해 만들어진 간단한 메시징 프로토콜입니다. STOMP는 널리 지원되며 WebSocket 및 웹에서 사용하기에 적합합니다.
답변
WebSocket API를 사용하면 웹 애플리케이션이 양방향 통신을 처리 할 수 있지만 STOMP는 단순한 텍스트 지향 메시징 프로토콜입니다.
STOMP 프로토콜은 웹 앱이 웹 서버와의 양방향 통신을 지원해야 할 때 웹 소켓 내부에서 일반적으로 사용됩니다.
좋은 튜토리얼은 Jeff Mesnill (2012)의 STOMP Over WebSocket입니다.
STOMP는 웹 소켓 없이도 사용할 수 있습니다 (예 : Telnet 연결 또는 메시지 브로 킹 서비스).
그리고 Raw WebSocket은 STOMP 없이도 사용할 수 있습니다. STOMP 및 SockJ가없는 Spring Boot + WebSocket 예제 .