스프링 websocket handler presend 질문 있습니다.
178
작성한 질문수 8
public Message<?> preSend(Message<?> message, MessageChannel channel) {
log.info("presend 실행은 되는지");
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
log.info("테스트{}",accessor.getCommand());
// // 메시지의 구독 명령이 CONNECT인 경우에만 실행
if (StompCommand.CONNECT.equals(accessor.getCommand())) {
StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(message);
log.info("구독 명령이 떨어졌어{}",headerAccessor.getNativeHeader("test"));
}
return message;
}위 코드처럼 실행했을 시 accessor.getCommand()가 connect거나 disconnect면
log.info("presend 실행은 되는지");
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
log.info("테스트{}",accessor.getCommand());이것이 2번 씩 출력되는데 원래 이런건지 아니면 제가 코딩을 잘못했는지 질문있습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
Spring에서 WebSocket을 사용할 때 preSend 메소드가 예상치 못하게 두 번 호출되는 경우가 있을 수 있습니다. 이는 Spring의 내부 동작 방식에 따라 결정되는 부분이기도 하고, 코드나 구성에 따라 발생할 수도 있습니다. preSend 메소드는 메시지가 실제로 전송되기 전에 호출되며, 메시지를 수정하거나 다른 작업을 수행할 수 있는 후크 포인트를 제공합니다.
이중으로 로그가 출력된다면, 일단 두 가지 가능성을 살펴볼 수 있습니다.
클라이언트 쪽에서 CONNECT 및 DISCONNECT 프레임이 의도치 않게 두 번 전송되고 있을 수 있습니다. 이 경우에는 네트워크 트래픽을 캡쳐하거나 클라이언트 측 로직을 검토하여 확인할 수 있습니다.
서버 측에서 어떠한 이유로 같은 메시지에 대해
preSend를 두 번 호출하는 것일 수도 있습니다. 이 경우에는 서버의 코드 또는 구성을 재검토하여 문제가 되는 부분을 찾아야 합니다.
preSend가 두 번 호출되는 것이 의도된 행동인지 혹은 버그인지를 확인하려면 디버깅을 통해 추가적인 정보를 수집하고 분석해야 할 것입니다. preSend에서 같은 메시지에 대해 두 번의 호출이 일어나는 상황을 디버그해서 어떤 경로로 메소드가 실행되는지, 그리고 그 원인이 무엇인지를 확인해 보세요. Spring Framework의 rich WebSocket support 문서를 참고하면 preSend와 관련된 더 자세한 정보를 확인할 수 있습니다.
추가적으로, ‘spring-boot-starter-websocket’ 모듈의 자동 구성과 관련된 자세한 내용은 Spring Boot Reference Documentation의 WebSockets 절에서 찾아볼 수 있습니다. 이 문서에서는 Spring Boot가 제공하는 WebSocket 관련 자동 구성 및 설정에 대한 정보를 제공하고 있으니 이를 참고하시면 좋을 것 같습니다.
만약 문제가 지속된다면 더 자세한 로그 정보, 사용된 구성, 클라이언트 및 서버 측 코드의 나머지 부분 등을 함께 제공해주시면 문제 해결에 더 도움이 될 것입니다.
build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)
0
5
1
네이버 API | '검색 - 책' API 제공 중단
0
31
2
Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.
0
41
2
장치 의존성과 CSR
0
32
1
테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.
0
25
1
[영한님]Spring Boot 및 프로젝트 생성
0
51
2
JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문
0
54
3
강의 요청 문의
0
39
2
클로드코드 명령어-대화&세션관리 수업 자료
0
40
1
PlatformTransactionManager, ResourcelessTransactionManager 질문
1
64
2
자료 한번에 다운받기
0
32
1
스프링 빈 등록 방법 2가지 다 알아야하는 이유
0
57
1
mybatis 를 이용한 crud에서 insert에서 resultType='long" 이라고 하셨는데요,
0
26
1
설계 트레이드 오프 링크 접속 안됨
0
84
2
테스트 질문, 어떤것을 사용할것인것에 대해서
0
45
1
깃허브주소 궁금합니다.
0
36
2
mariaDB 설정
0
32
1
섹션4 퀴즈 오타있어요.
0
46
1
AWS 배포 성능테스트
0
73
2
퀴즈가 안열려요
0
74
2
7강 보고 있는데요.. 글자가 너무 작아요
0
40
1
트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?
0
45
1
헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.
0
128
2
h2 database
2
56
2





