我正在尝试发送一个大消息(>130k)到运行在Jetty 9下的CometD服务器。当服务器接收到此大消息时,它生成以下异常:
org.eclipse.jetty.websocket.api.MessageTooLargeException: Text message size [130353] exceeds maximum size [65536]
at org.eclipse.jetty.websocket.api.WebSocketPolicy.assertValidTextMessageSize(WebSocketPolicy.java:140)
at org.eclipse.jetty.websocket.common.Parser.assertSanePayloadLength(Parser.java:127)
at org.eclipse.jetty.websocket.common.Parser.parseFrame(Parser.java:482)
at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:254)
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632)
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745)
[qtp83954662-20] INFO org.cometd.websocket.server.WebSocketTransport$WebSocketScheduler$1 - WebSocket Error, Address: null
...
(the rest removed for brevity)
我知道问题是什么,并且已经查看了CometD文档。根据文档,您可以使用初始化参数更改缓冲区大小和最大消息大小:ws。bufferSize和ws.maxMessageSize。我在web.xml文件中设置了这些参数并重新启动了Jetty,但参数设置似乎没有效果。我仍然得到完全相同的异常,因为缓冲区大小保持不变。
web.xml文件设置如下:
<servlet>
<servlet-name>cometd</servlet-name>
<servlet-class>org.cometd.server.CometDServlet</servlet-class>
<init-param>
<param-name>ws.bufferSize</param-name>
<param-value>400000</param-value>
</init-param>
<init-param>
<param-name>ws.maxMessageSize</param-name>
<param-value>400000</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>cometd</servlet-name>
<url-pattern>/cometd/*</url-pattern>
</servlet-mapping>
我错过了什么吗?如何在CometD服务器中设置最大消息大小,并让服务器实际使用该消息大小?
你的web.xml
是正确的,这是解决问题的正确方法。
CometD测试套件中有测试可以验证ws.maxMessageSize
参数是否正确工作。
我只是试着修改CometD演示,添加ws.maxMessageSize
,然后从测试客户端发送一个大消息,它只是完美地工作。
也许你在参数名中有一个错别字,或者其他什么东西将参数重置为默认值?