如何更改传入CometD文本消息的最大大小



我正在尝试发送一个大消息(>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,然后从测试客户端发送一个大消息,它只是完美地工作。

也许你在参数名中有一个错别字,或者其他什么东西将参数重置为默认值?

相关内容

  • 没有找到相关文章

最新更新