[SPRING] Java SockJS Spring 클라이언트 및 메시지 크기
SPRINGJava SockJS Spring 클라이언트 및 메시지 크기
SockJS 자바 클라이언트를 사용하여, 나는 Spring sockjs 서버에 연결하려고하는데 ~ 20Kb의 메시지 (헤더 없음)에 대해 오류 1009가 발생한다. Javascript 라이브러리가 정상적으로 작동합니다.
Transport closed with CloseStatus[code=1009, reason=The decoded text message was too big
for the output buffer and the endpoint does not support partial messages] in WebSocketClientSockJsSession
[id='9fa30eb453e14a8c8612e1064640646a, url=ws://127.0.0.1:8083/user]
서버에 몇 가지 설정 클래스가 있습니다. (필자가 필요한 것보다 더 많은 시간을 설정한다면 현재로서는 모릅니다.)
@Configuration
@EnableWebSocket
public class WebSocketTransportConfig implements WebSocketConfigurer {
// Important web socket setup. If big message is coming through, it may overflow the buffer and this will lead in disconnect.
// All messages that are coming through normally (including snapshots) must be order of magnitude smaller, or connection will be broken
// sometimes
// There is also MaxBinaryMessageSize that we do not employ as we use Stomp, but for completeness it is also set to same values.
// Javadoc http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.html#setTextMessageSizeLimit-int-
public static final int MAX_TEXT_MESSAGE_SIZE = 2048000; // 2 Megabytes.
public static final int BUFFER_SIZE = MAX_TEXT_MESSAGE_SIZE * 5;
private static final Logger LOGGER = LogManager.getLogger(WebSocketTransportConfig.class);
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
}
@Bean
public DefaultHandshakeHandler handshakeHandler() {
LOGGER.info("Websocket buffer size: " + BUFFER_SIZE + " bytes.");
WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
policy.setMaxTextMessageBufferSize(BUFFER_SIZE);
policy.setMaxTextMessageSize(MAX_TEXT_MESSAGE_SIZE);
policy.setMaxBinaryMessageBufferSize(BUFFER_SIZE);
policy.setMaxBinaryMessageSize(MAX_TEXT_MESSAGE_SIZE);
policy.setInputBufferSize( BUFFER_SIZE);
policy.setIdleTimeout(600000);
return new DefaultHandshakeHandler(
new JettyRequestUpgradeStrategy(new WebSocketServerFactory(policy)));
}
}
과
@Configuration
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketBrokerConfig extends WebSocketMessageBrokerConfigurationSupport implements WebSocketMessageBrokerConfigurer {
@Override
public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
// Increase buffers.
// Too little buffers may result in fatal errros when transmitting relatively large messages.
registry.setMessageSizeLimit(WebSocketTransportConfig.MAX_TEXT_MESSAGE_SIZE);
registry.setSendBufferSizeLimit(WebSocketTransportConfig.BUFFER_SIZE);
super.configureWebSocketTransport(registry);
}
}
Stomp spring 웹 소켓 메시지에 따르면 크기 제한을 초과하여 Java Spring SockJS 클라이언트를 연결할 때 크기 오류가 발생하지만 여전히 1009 (너무 큰 메시지) 오류가 발생합니다.
그러므로 나는 두 가지 문제 중 하나를 가질 수 있다고 생각합니다.
Java SockJS Spring 클라이언트에서 버퍼 크기를 늘리려면 어떻게해야합니까?
해결법
-
==============================
1.나는 같은 문제를 발견했다. 모든 것이 클라이언트가 아닌 서버의 구성에 관한 것입니다. WebSocketContainer 인스턴스를 생성하고 구성 할 수 있습니다.
나는 같은 문제를 발견했다. 모든 것이 클라이언트가 아닌 서버의 구성에 관한 것입니다. WebSocketContainer 인스턴스를 생성하고 구성 할 수 있습니다.
WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.setDefaultMaxBinaryMessageBufferSize(your_size); container.setDefaultMaxTextMessageBufferSize(your_size); WebSocketClient transport = new StandardWebSocketClient(container); WebSocketStompClient stompClient = new WebSocketStompClient(transport);
your_size - 크기 (바이트).
-
==============================
2.이런 식으로하고 있다면 :
이런 식으로하고 있다면 :
SockJsClient sockJsClient = new SockJsClient(transports); WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
시험:
stompClient.setInboundMessageSizeLimit(your_message_size_limit);
from https://stackoverflow.com/questions/38325807/java-sockjs-spring-client-and-message-size by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 부트 컨트롤러에서 JAXB 생성 요소 반환 (0) | 2019.03.23 |
---|---|
[SPRING] 봄에 임베디드 부두에서 스프링 보안 설정하기 (0) | 2019.03.23 |
[SPRING] Spring MBeanExporter - MBean에 이름 지정하기 (0) | 2019.03.23 |
[SPRING] Spring Batch : Spring MVC 컨트롤러 내에서 새로운 스레드로 작업 시작하기 (0) | 2019.03.23 |
[SPRING] AnnotationException 참조되지 않은 속성 (One | Many) ToOne (0) | 2019.03.23 |