Loading...
Spring Framework Reference Documentation 7.0.2의 WebSocket Scope의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
각 WebSocket 세션에는 attribute 맵이 있습니다. 이 맵은 인바운드 클라이언트 메시지에 헤더로 첨부되며, 다음 예제에서 보듯이 controller 메서드에서 접근할 수 있습니다:
1@Controller 2public class MyController { 3 4 @MessageMapping("/action") 5 public void handle(SimpMessageHeaderAccessor headerAccessor) { 6 Map<String, Object> attrs = headerAccessor.getSessionAttributes(); 7 // ... 8 } 9}
websocket 스코프에서 Spring이 관리하는 빈을 선언할 수 있습니다.
clientInboundChannel에 등록된 controller와 모든 채널 인터셉터에
WebSocket-scoped 빈을 주입할 수 있습니다. 이들은 일반적으로 싱글톤이며
개별 WebSocket 세션보다 더 오래 존재합니다.
따라서
@WebSocketScope로 편리하게 정의되는 프록시 모드의 WebSocket-scoped 빈을
사용해야 합니다:
1@Component 2@WebSocketScope 3public class MyBean { 4 5 @PostConstruct 6 public void init() { 7 // 의존성이 주입된 후 호출됨 8 } 9 10 // ... 11 12 @PreDestroy 13 public void destroy() { 14 // WebSocket 세션이 종료될 때 호출됨 15 } 16} 17 18@Controller 19public class MyController { 20 21 private final MyBean myBean; 22 23 @Autowired 24 public MyController(MyBean myBean) { 25 this.myBean = myBean; 26 } 27 28 @MessageMapping("/action") 29 public void handle() { 30 // 현재 WebSocket 세션으로부터의 this.myBean 31 } 32}
다른 커스텀 스코프와 마찬가지로, Spring은 controller에서 처음 접근될 때
새로운 MyBean 인스턴스를 초기화하고 그 인스턴스를 WebSocket
세션 attribute에 저장합니다.
동일한 인스턴스는 세션이 끝날 때까지 이후에도 계속 반환됩니다. WebSocket-scoped 빈은 앞의 예제에 나온 것처럼 모든 Spring 라이프사이클 메서드가 호출됩니다.
STOMP Client
Performance