I am new in Java WebSocket
. When I tried to pass a JSON
with length greater than 8192
, the websocket disconnected immediately. How ever JSON
with length <= 8191
works fine.
Is there any MAX SIZE/ LIMIT
of data that can be passed through a WebSocket
? if yes, what's that size?
I FIXED THE ERROR BY ADDING THESE LINES TO my web.xml
<context-param>
<param-name>org.apache.tomcat.websocket.textBufferSize</param-name>
<param-value>32768</param-value>
</context-param>
<context-param>
<param-name>org.apache.tomcat.websocket.binaryBufferSize</param-name>
<param-value>32768</param-value>
</context-param>
Thanks @Davide Lorenzo MARINO.
As of v3, socket.io has a default message limit of 1 MB. If a message is larger than that, the connection will be killed.
** Because of the WebSocket frame-size quota of 32 KB, a message larger than 32 KB must be split into multiple frames, each 32 KB or smaller. If a larger message (or larger frame size) is received, the connection is closed with code 1009.
Sending Messages With WebSocket You can send both text and binary data through a WebSocket. For your demo application you need to send the contents of the textarea to the server when the form is submitted. To do this you first need to set up an event listener on the form.
But why are WebSockets hard to scale? The main challenge is that connections to your WebSocket server need to be persistent. And even once you've scaled out your server nodes both vertically and horizontally, you also need to provide a solution for sharing data between the nodes.
IT is actually a value very big and probably you don't worry about it.
A single frame, by RFC-6455 base framing, has a maximum size limit of 18,446,744,073,709,551,615 bytes (maximum value of a 64-bit unsigned value).
Try only to make it as little as possible to handle your requirements.
Because the problem is generated on the server side (tomcat). Checking the tomcat documentation I see that:
The default buffer size for binary messages is 8192 bytes. This may be changed for a web application by setting the servlet context initialization parameter org.apache.tomcat.websocket.binaryBufferSize to the desired value in bytes.
So you can change it using updating the org.apache.tomcat.websocket.binaryBufferSize parameter in the configuration file of tomcat.
For additional informations please see the tomcat guide here
About the question related with WebSocket getting disconnected, I had same problem in my Android client that was receiving next message "Binary message size exceeds maximum size".
After looking for some solution in all the Jetty documentation and rest of web pages, the only working option that I have got is to include next code "maxBinaryMessageSize = size * 1024" (where size is your needed maximum limit from client point of view) in the WebSocket class definition, as you can see in next lines:
import org.eclipse.jetty.websocket.api.BatchMode;
import org.eclipse.jetty.websocket.api.RemoteEndpoint;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
@WebSocket(maxBinaryMessageSize = 1024 * 1024)
public class MyClientWebSocket
{
@OnWebSocketClose
public void onClose(int statusCode, String reason)
{
closeLatch.countDown();
}
@OnWebSocketError
public void onError(Throwable reason)
{
//TODO ACORDARSE DE QUITAR ESTO
Log.w(TAG, "+++ ERROR : " + reason);
}
@OnWebSocketConnect
public void onConnect(Session session)
{
// your code
}
@OnWebSocketMessage
public void onMessageBinary(byte[] message, int offset, int length)
{
// message can be processed with a maximum of 1024 * 1024 bytes and not anymore limited to 64 * 1024
}
}
If there is some WebSocket expert that can confirm if this is a correct solution from client side (in Java/Android), this would be great. Thanks.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With