springboot 서버 통합 웹소켓 및 클라이언트 소켓IO 이벤트 감청

11833 단어

통합 웹소켓


stomp over 웹socket 프로토콜을 사용하여 http 프로토콜을 기반으로 하기 때문에 차단될 수 있습니다

의존 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

구성 클래스

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    private static final endPoint="/websocket";//socket 
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint(endPoint).setAllowedOrigins("*").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // 
        registry.enableSimpleBroker("/topic","/user");
        registry.setUserDestinationPrefix("/user");
        // 
        registry.setApplicationDestinationPrefixes("/app");
    }
}

메시지 보내기

@Autowired
private SimpMessagingTemplate simpMessagingTemplate;
private Logger logger= LoggerFactory.getLogger(WebSocketDemo.class);
public void sendMessage(){
    simpMessagingTemplate.convertAndSend(" "," ");
}

클라이언트 모니터링


클라이언트와 서버가 웹소켓 연결을 구축할 때 서버 측은 클라이언트와 서버가 연결 구축, 연결 완료, 연결 닫기(브라우저 현재 탭 페이지 닫기, 새로 고침 등 포함), 구독, 구독 취소와 관련된 이벤트 클래스를 감지할 수 있습니다. SessionConnectEvent, SessionConnectedEvent, SessionDisconnect Event, SessionSubscribeEvent,SessionUnsubscribeEvent Example:spring 검색 가능한 클래스에 다음 방법을 추가합니다.
@EventListener
public void onDisconnectEvent(SessionDisconnectEvent event) {
       String sessionId=event.getSessionId();
       System.out.println(sessionId);
}

통신 예


sessionId는 클라이언트와 서버가 연결될 때 발생하는 것으로 SessionConnectedEvent에도 있습니다.이 sessionId와 클라이언트가 연결될 때userId를 통해 현재 클라이언트와 통신하는 목적을 달성할 수 있고 모든 클라이언트의 구독 주소를 유일하게 할 수 있으며 서버가 지정한 클라이언트의 구독 주소로 전송할 수 있습니다
stomp.connect(userId, "guest", function(frame) {
    stomp.subscribe(" ", " ");
});
@EventListener
public void BrokerAvailabilityEvent(SessionConnectedEvent event) {
    Long userId=Long.parseLong (((LinkedList) event.getMessage().getHeaders().get("simpConnectMessage", GenericMessage.class).getHeaders().get("nativeHeaders",Map.class).get("login")).get(0).toString());
    System.out.println("userId:"+userId+"   sessionId:"+event.getMessage().getHeaders().get("simpSessionId"));
}

좋은 웹페이지 즐겨찾기