Loading...
Spring Framework Reference Documentation 7.0.2의 STOMP Client의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Spring은 STOMP over WebSocket client와 STOMP over TCP client를 제공합니다.
시작하려면 다음 예제와 같이 WebSocketStompClient를 생성하고 구성할 수 있습니다:
1WebSocketClient webSocketClient = new StandardWebSocketClient(); 2WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient); 3stompClient.setMessageConverter(new StringMessageConverter()); 4stompClient.setTaskScheduler(taskScheduler); // for heartbeats
앞의 예제에서 StandardWebSocketClient를 SockJsClient로 대체할 수 있습니다.
이는 SockJsClient 또한 WebSocketClient의 구현체이기 때문입니다. SockJsClient는
WebSocket 또는 HTTP 기반 전송을 폴백으로 사용할 수 있습니다. 더 자세한 내용은
SockJsClient를 참조하십시오.
다음으로, STOMP 세션을 위한 핸들러를 제공하고 연결을 설정할 수 있습니다. 다음 예제와 같습니다:
1String url = "ws://127.0.0.1:8080/endpoint"; 2StompSessionHandler sessionHandler = new MyStompSessionHandler(); 3stompClient.connect(url, sessionHandler);
세션이 사용할 준비가 되면, 다음 예제와 같이 핸들러에 알림이 전달됩니다:
1public class MyStompSessionHandler extends StompSessionHandlerAdapter { 2 3 @Override 4 public void afterConnected(StompSession session, StompHeaders connectedHeaders) { 5 // ... 6 } 7}
세션이 설정되면, 다음 예제와 같이 어떤 페이로드든 전송할 수 있고
구성된 MessageConverter로 직렬화됩니다:
1session.send("/topic/something", "payload");
또한 목적지에 구독할 수 있습니다. subscribe 메서드는
구독 상의 메시지를 위한 핸들러가 필요하며, 구독 해제에 사용할 수 있는
Subscription 핸들을 반환합니다. 수신된 각 메시지에 대해, 핸들러는 페이로드가
역직렬화되어야 하는 대상 Object 타입을 지정할 수 있습니다. 다음 예제와 같습니다:
1session.subscribe("/topic/something", new StompFrameHandler() { 2 3 @Override 4 public Type getPayloadType(StompHeaders headers) { 5 return String.class; 6 } 7 8 @Override 9 public void handleFrame(StompHeaders headers, Object payload) { 10 // ... 11 } 12 13});
STOMP 하트비트를 활성화하려면, WebSocketStompClient를 TaskScheduler로 구성하고
선택적으로 하트비트 간격(쓰기 비활성 상태 10초 후 하트비트 전송,
읽기 비활성 상태 10초 후 연결 종료)을 커스터마이징할 수 있습니다.
WebSocketStompClient는 비활성 상태, 즉 다른 메시지가 전송되지 않을 때에만
하트비트를 전송합니다. 이는 외부 브로커를 사용할 때 문제가 될 수 있습니다.
논-브로커 목적지를 가진 메시지는 활동을 나타내지만 실제로 브로커로
포워드되지 않기 때문입니다. 그런 경우, External Broker를
초기화할 때 TaskScheduler를 구성할 수 있으며, 이렇게 하면 논-브로커
목적지를 가진 메시지만 전송되는 경우에도 하트비트가 브로커로 포워드되도록
보장합니다.
동일한 머신에서 수천 개의 클라이언트를 시뮬레이션하는 성능 테스트를 위해<br>WebSocketStompClient를 사용할 때는 하트비트를 끄는 것을 고려하십시오.<br>각 연결이 자체 하트비트 태스크를 스케줄링하며, 이는 동일한 머신에서<br>동작하는 많은 수의 클라이언트에 대해 최적화되어 있지 않기 때문입니다. |
STOMP 프로토콜은 또한 영수증을 지원합니다. 여기서 클라이언트는 receipt
헤더를 추가해야 하고, 서버는 전송 또는 구독이 처리된 후 RECEIPT 프레임으로
응답합니다. 이를 지원하기 위해 StompSession은
setAutoReceipt(boolean)을 제공하며, 이는 이후의 모든 전송 또는 구독 이벤트에
receipt 헤더가 추가되도록 합니다.
또는 StompHeaders에 receipt 헤더를 수동으로 추가할 수도 있습니다.
전송과 구독은 모두 Receiptable 인스턴스를 반환하며,
이를 사용해 영수증 성공 및 실패 콜백을 등록할 수 있습니다.
이 기능을 사용하려면 클라이언트를 TaskScheduler와 영수증이 만료되기 전까지의 시간
(기본값 15초)으로 구성해야 합니다.
StompSessionHandler 자체가 StompFrameHandler라는 점에 유의하십시오.
이를 통해 메시지 처리에서 발생하는 예외에 대한 handleException 콜백에
더해 ERROR 프레임도 처리할 수 있으며, ConnectionLostException을 포함한
전송 계층 오류에 대한 handleTransportError도 처리할 수 있습니다.
WebSocketStompClient의 inboundMessageSizeLimit 및 outboundMessageSizeLimit
프로퍼티를 사용하여 인바운드 및 아웃바운드 WebSocket 메시지의 최대 크기를 제한할 수
있습니다. 아웃바운드 STOMP 메시지가 제한을 초과하면 부분 프레임으로 분할되며,
수신 측에서 이를 재조립해야 합니다. 기본적으로 아웃바운드 메시지에는 크기 제한이
없습니다.
인바운드 STOMP 메시지 크기가 구성된 제한을 초과하면
StompConversionException이 발생합니다. 인바운드 메시지의 기본 크기 제한은 64KB입니다.
1WebSocketClient webSocketClient = new StandardWebSocketClient(); 2WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient); 3stompClient.setInboundMessageSizeLimit(64 * 1024); // 64KB 4stompClient.setOutboundMessageSizeLimit(64 * 1024); // 64KB
Interception
WebSocket Scope