2014-10-24 30 views
5

Na stronie klienta używam Stomp połączenie websocket i po stronie serwera używam Spring 4 To po stronie klienta zrobiłem konfiguracyjnym jakoStomp nad websocket: Rozmiar bufora wysyłania przekroczony dopuszczalny limit

var socket = new SockJS(urlBase + "/" + contextroot+'/hello'); 
stompClient = Stomp.over(socket); 

poniżej kod wykonywane dla każdego 2 sekundy, aby wysłać dane do serwera

stompClient.send('/app/sendRequest/'+indexVal, {}, 
JSON.stringify({index : simIndex})); 

Server reagować poniżej kolejki

stompClient.subscribe('/queue/response', processResponseObj); 

w konfiguracji po stronie serwera odbywa się za

<websocket:message-broker application-destination-prefix="/app"> 
    <!--<websocket:transport send-timeout="15000" message-size="1051648" send-buffer-size="1051648"/> --> 
    <websocket:stomp-endpoint path="/hello"> 
     <websocket:sockjs /> 
    </websocket:stomp-endpoint> 
    <websocket:stomp-broker-relay prefix="/topic, /queue" /> 

    <websocket:message-converters> 
     <beans:bean class="org.springframework.messaging.converter.MappingJackson2MessageConverter"> 
     <beans:property name="objectMapper" ref="objectMapper" /> 
     </beans:bean> 
    </websocket:message-converters> 

    </websocket:message-broker> 

Wiadomość responsded na stronie serwera

messagingTemplate.convertAndSend("/queue/response",obj); 

Po pewnym sekund Dostaję komunikat o błędzie

2014-10-24 16:39:33,869 ERROR et.messaging.SubProtocolWebSocketHandler: 330 - Terminating session id 'dkbzrkxp' 
org.springframework.web.socket.handler.SessionLimitExceededException: The send buffer size 1147188 bytes for session 'dkbzrkxp exceeded the allowed limit 1051648 
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.sessionLimitReached(ConcurrentWebSocketSessionDecorator.java:162) ~[ConcurrentWebSocketSessionDecorator.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.checkSessionLimits(ConcurrentWebSocketSessionDecorator.java:150) ~[ConcurrentWebSocketSessionDecorator.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.sendMessage(ConcurrentWebSocketSessionDecorator.java:105) ~[ConcurrentWebSocketSessionDecorator.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageToClient(StompSubProtocolHandler.java:276) ~[StompSubProtocolHandler.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.handleMessage(SubProtocolWebSocketHandler.java:326) ~[SubProtocolWebSocketHandler.class:4.0.6.RELEASE] 
    at org.springframework.messaging.support.ExecutorSubscribableChannel$1.run(ExecutorSubscribableChannel.java:70) [ExecutorSubscribableChannel$1.class:4.0.6.RELEASE] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_20] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_20] 
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_20] 
2014-10-24 16:39:33,871 WARN ort.session.WebSocketServerSockJsSession: 285 - Failed to send SockJS close frame: The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid state for called method 
2014-10-24 16:39:33,875 ERROR et.messaging.SubProtocolWebSocketHandler: 330 - Terminating session id 'nro1ww4x' 
org.springframework.web.socket.handler.SessionLimitExceededException: The send buffer size 1147188 bytes for session 'nro1ww4x exceeded the allowed limit 1051648 
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.sessionLimitReached(ConcurrentWebSocketSessionDecorator.java:162) ~[ConcurrentWebSocketSessionDecorator.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.checkSessionLimits(ConcurrentWebSocketSessionDecorator.java:150) ~[ConcurrentWebSocketSessionDecorator.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator.sendMessage(ConcurrentWebSocketSessionDecorator.java:105) ~[ConcurrentWebSocketSessionDecorator.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageToClient(StompSubProtocolHandler.java:276) ~[StompSubProtocolHandler.class:4.0.6.RELEASE] 
    at org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.handleMessage(SubProtocolWebSocketHandler.java:326) ~[SubProtocolWebSocketHandler.class:4.0.6.RELEASE] 
    at org.springframework.messaging.support.ExecutorSubscribableChannel$1.run(ExecutorSubscribableChannel.java:70) [ExecutorSubscribableChannel$1.class:4.0.6.RELEASE] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_20] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_20] 
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_20] 
2014-10-24 16:39:33,876 WARN ort.session.WebSocketServerSockJsSession: 285 - Failed to send SockJS close frame: The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid state for called method 
2014-10-24 16:39:34,833 ERROR standard.StandardWebSocketHandlerAdapter: 55 - Closing due to exception for WebSocket session id=0 

starałem się wraz ze wzrostem wielkości bufora również ale po pewnym czasie jej dawanie samego wyjątku. po osiągnięciu rozmiaru bufora.

Myślę, że bufor sesji websocket nie został zwolniony po dostarczeniu wiadomości.

Czy istnieje jakieś ustawienie dla tego samego? Czy przegapiłem jakąkolwiek konfigurację?

+0

Czy rozwiązać ten problem? Stoję w obliczu tego samego problemu –

+0

rozwiązany przez dodanie registration.setMessageSizeLimit (102400 * 1024); –

Odpowiedz

-1

rozwiązany poprzez dodanie

public void configureWebSocketTransport(WebSocketTransportRegistration registration) { 
registration.setMessageSizeLimit(102400* 1024); 
} 
+0

To nie jest odpowiedź, jest to w najlepszym razie niekompletne. Gdzie to dodałeś ?! – FAS

2

Spróbuj skonfigurować gniazdo internetowe po stronie serwera. Coś takiego int klasę WebSocketConfig:

public void configureWebSocketTransport(WebSocketTransportRegistration registration) { 
    registration.setMessageSizeLimit(500 * 1024); 
    registration.setSendBufferSizeLimit(1024 * 1024); 
    registration.setSendTimeLimit(20000); 
} 
Powiązane problemy