복붙노트

[SPRING] spring sockjs websocket 서버 구현을 위해 출력 버퍼를 증가시키는 방법

SPRING

spring sockjs websocket 서버 구현을 위해 출력 버퍼를 증가시키는 방법

나는 sockjs websocket 서버의 스프링 구현을 사용했고 8KB 이상의 메시지를 전송할 수 없었다. 다음은 오류이다.

2014-02-12 19:36:29,990 - org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession - DEBUG - SockJS session id=35n41xel was closed, CloseStatus [code=1009, reason=The decoded text message was too big for the output buffer and the endpoint does not support partial messages]

어떤 아이디어 어떻게 버퍼 크기를 늘릴 수 있습니까?

나는 Spring Sockjs가 Tomcat 컨테이너를 사용함에 따라 공장을 다음과 같이 사용했다 (App은 Tomcat에 배치되었고, 실제로 Tomcat lib를 사용한다는 것을 확인하기 위해 디버깅했다)

@Bean
public WebSocketContainerFactoryBean createWebSocketContainer() {
    WebSocketContainerFactoryBean container = new WebSocketContainerFactoryBean();
    container.setMaxTextMessageBufferSize(16384);
    container.setMaxBinaryMessageBufferSize(8192);
    return container;
}

그런 다음 내 URL 매핑이 보이게됩니다.

@Override 
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(coBrowseSockJsCustomerHandler(), "/sockjs/cobrowse/customer/").withSockJS();}

sockjs와 함께이 bean을 설정해야합니까? sockjs는이 마포를 사용해야한다는 것을 어떻게 알 수 있습니까?

해결법

  1. ==============================

    1.단서를 사용하여 해결했습니다. http://docs.spring.io/spring/docs/4.0.1.RELEASE/javadoc-api/index.html?org/springframework/web/socket/sockjs/SockJsService.html -got hold ServletServerContainerFactoryBean의 속성을 설정하고

    단서를 사용하여 해결했습니다. http://docs.spring.io/spring/docs/4.0.1.RELEASE/javadoc-api/index.html?org/springframework/web/socket/sockjs/SockJsService.html -got hold ServletServerContainerFactoryBean의 속성을 설정하고

    @Bean
    public ServletServerContainerFactoryBean createServletServerContainerFactoryBean() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(32768);
        container.setMaxBinaryMessageBufferSize(32768);
        logger.info("Websocket factory returned");
        return container;
    }
    
  2. ==============================

    2.클라이언트 측 :

    클라이언트 측 :

    @Bean
    public static WebSocketStompClient getClient() {
        List<Transport> transports = new ArrayList<>();
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        container.setDefaultMaxBinaryMessageBufferSize(1024 * 1024);
        container.setDefaultMaxTextMessageBufferSize(1024 * 1024);
        transports.add(new WebSocketTransport(new StandardWebSocketClient(container)));
        WebSocketClient webSocketClient = new SockJsClient(transports);
        WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
        stompClient.setInboundMessageSizeLimit(Integer.MAX_VALUE);
        stompClient.setMessageConverter(new MappingJackson2MessageConverter());
        return stompClient;
    }
    

    서버 측용 :

    @Bean
    public ServletServerContainerFactoryBean createServletServerContainerFactoryBean() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(32768);
        container.setMaxBinaryMessageBufferSize(32768);
        logger.info("Websocket factory returned");
        return container;
    }
    
  3. ==============================

    3.websocket 엔진을 구성하고 버퍼 크기를 늘릴 수 있습니다.

    websocket 엔진을 구성하고 버퍼 크기를 늘릴 수 있습니다.

    실제 크기에 따라 사용하려는 메시지가 메모리에 완전히 버퍼링된다는 것을 기억하십시오! 클라이언트가 지원하는 경우 부분 메시지를 사용하는 것이 좋습니다.

  4. from https://stackoverflow.com/questions/21730566/how-to-increase-output-buffer-for-spring-sockjs-websocket-server-implementation by cc-by-sa and MIT license