Stomp over websocket: send buffer size exceeds allowed limit

On the client side, I use Stomp to connect to the websocket and server side. I am using Spring 4 On the client side, I configured as

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

Below is the code executed every 2 seconds to send data to the server

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

The server responds to the next queue.

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

server side made as

 <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> 

Server Response Message

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

After a few seconds I get an error message

 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 

I tried with increasing the size of the buffer, but after a while it gave the same exception. after reaching the buffer size.

I think the websocket session buffer is not freed after sending the message.

Are there any settings for the same? Am I missing any configuration?

+5
source share
2 answers

Solved by adding

  public void configureWebSocketTransport(WebSocketTransportRegistration registration) { registration.setMessageSizeLimit(102400* 1024); } 
-1
source

Try setting up a network socket on the server side. Something like this in the WebSocketConfig class:

  public void configureWebSocketTransport(WebSocketTransportRegistration registration) { registration.setMessageSizeLimit(500 * 1024); registration.setSendBufferSizeLimit(1024 * 1024); registration.setSendTimeLimit(20000); } 
+2
source

Source: https://habr.com/ru/post/1205424/


All Articles