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