Jetty 9 WebSocket服务器会话上的最大邮件大小

Jetty 9 WebSocket服务器会话上的最大邮件大小,websocket,size,jetty,message,Websocket,Size,Jetty,Message,我遇到了这个问题,在任何地方都很难找到答案,所以我想我会在这里为未来的程序员提供答案 在Jetty 9中,如果您试图在会话对象上设置最大消息大小以处理大数据包,那么它将不起作用。如果您的客户端试图发送大数据,您仍然会断开连接。我说的是这个对象上的setMaximumMessageSize: 相反,您需要做的是设置从WebSocketServletFactory获取的策略对象的最大消息大小 公共最终类MyWebSocketServlet扩展了WebSocketServlet { 私有静态最终最大长

我遇到了这个问题,在任何地方都很难找到答案,所以我想我会在这里为未来的程序员提供答案

在Jetty 9中,如果您试图在会话对象上设置最大消息大小以处理大数据包,那么它将不起作用。如果您的客户端试图发送大数据,您仍然会断开连接。我说的是这个对象上的setMaximumMessageSize:

相反,您需要做的是设置从WebSocketServletFactory获取的策略对象的最大消息大小

公共最终类MyWebSocketServlet扩展了WebSocketServlet
{
私有静态最终最大长消息大小=1000000;
@凌驾
公共void配置(WebSocketServletFactory工厂)
{
factory.getPolicy().setMaxMessageSize(最大消息大小);
setCreator(新的MyWebSocketCreator());
}
}

这将按预期工作,您的服务器将能够处理最大大小的大型消息。

您在
WebSocketServlet
中设置最大消息的方式是正确的

正如您在javadoc中指出的Session.setMaximumMessageSize(long)是JSR-356(javax.websocketAPI)早期草案的一个不幸泄漏

码头侧API上的该方法不应存在,已在码头9.1中删除

错误已提交:

注意:Jetty 9.1将支持JSR-356(javax.websocketAPI)。其中javax.websocket.Session有两种类似行为的方法

  • javax.websocket.Session.setMaxBinaryMessageBufferSize(int)
  • javax.websocket.Session.setMaxTextMessageBufferSize(int)

我在发送超过64KB的文件(二进制数据)时遇到了这个问题。我在用电话。 最后,我需要做的唯一一件事是在
@OnOpen
注释方法的
会话
参数中设置MaxBinaryMessageBufferSize

@ClientEndpoint
@ServerEndpoint(value = "/ws")
public class EventSocket {

    @OnOpen
    public void onWebSocketConnect(Session sess) {
        sess.setMaxBinaryMessageBufferSize(1 * 1024 * 1024); // 1MB
    }

     @OnMessage
    public void processUpload(byte[] b, boolean last, Session session) {
            ...
    }

}

如果任何人想要可配置的替代方案,在web.xml中设置servlet参数
maxtMessageSize
也可以-


MyWebSocketServlet
test.MyWebSocketServlet
maxTextMessageSize
1048576
MyWebSocketServlet
/MyWebSocket/*