Spring_stomp

2022. 12. 28. 16:50Spring

728x90

Stomp?

  • WebSocket위에서 동작하는 문자 기반 메세징 프로토콜
  • 클라이언트와 서버가 전송할 메세지의 유형, 형식, 내용들을 정의하는 매커니즘
  • TCP와 웹소켓 같은 신뢸 수 있는 양방향 스트리밍 네트워크 프로토콜에서 사용 가능
  • 기본적으로 pub/sub 구조

장점

  • 메세징 프로토콜과 메세징 형식을 개발할 필요가 없다.
  • 메세지 브로커를 사용하면 구독을 관리하고 메세지를 broadcase하는데 사용할 수 있다.

코드

  • Config (BE)
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config){
        config.enableSimpleBroker("/sub"); // 메시지 브로커 등록 코드, 메시지를 뿌릴때 사용
        config.setApplicationDestinationPrefixes("/pub"); // 도착 경로에대한 prefix
        config.setUserDestinationPrefix("/user");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws")       //클라이언트에서 websocket에 접속하는 endpoint를 등록
                .setAllowedOriginPatterns("*");         //CORS허용
    }
}
  • Controller (BE)
@RestController
public class SocketController {

    private final SimpMessageSendingOperations simpMessageSendingOperations;
    private final SocketService socketService;

    public SocketController(SimpMessageSendingOperations simpMessageSendingOperations, SocketService socketService) {
        this.simpMessageSendingOperations = simpMessageSendingOperations;
        this.socketService = socketService;
    }

    @MessageMapping("/sub")
    @SendTo("/pub")
    public void socketHandler(SocketVo socketVo){
        simpMessageSendingOperations.convertAndSend("/sub/channel/" + socketVo.getChannelId(), socketVo);
    }
}
  • 특정 사용자에게 메시지 전송 (BE)
public void completeMatchingMessage(String userEmail){
        JSONObject result = new JSONObject();
        result.put("userEmail", userEmail);
        result.put("sessionToken", "asdf");
        messagingTemplate.convertAndSend("/sub/" + userEmail,result  );
    }

테스트

  1. 크롬 웹스토어 -> apic 설치
  2. 플러그인 실행

  • ws 클릭 -> 소켓 테스트 화면으로 이동
  • stomp 클릭 -> stomp 테스트
  • ws://localhost:8080/ws - 연결할 링크 (소켓이므로 http 대신 ws, 코드에서 설정한 endpoint가 ws이므로 마지막 ws로 끝남)
  • subcription URL : 구독 URL - 해당 URL에 publisher가 메시지 보내면 해당 url을 구독하는 모든 사용자에게 메시지 보내짐

  1. 소켓 통신 확인

'Spring' 카테고리의 다른 글

Spring_MySQL 연결_gradle  (0) 2023.03.22
Spring_tinyLog  (0) 2023.03.09
Spring_JPA_페이지네이션  (0) 2022.12.28
Spring_env 파일 설정  (0) 2022.12.28
Spring_네이버 메일 인증  (0) 2022.12.28