Spring_stomp
2022. 12. 28. 16:50ㆍSpring
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 );
}
테스트
- 크롬 웹스토어 -> apic 설치
- 플러그인 실행
- ws 클릭 -> 소켓 테스트 화면으로 이동
- stomp 클릭 -> stomp 테스트
- ws://localhost:8080/ws - 연결할 링크 (소켓이므로 http 대신 ws, 코드에서 설정한 endpoint가 ws이므로 마지막 ws로 끝남)
- subcription URL : 구독 URL - 해당 URL에 publisher가 메시지 보내면 해당 url을 구독하는 모든 사용자에게 메시지 보내짐
- 소켓 통신 확인
'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 |