2016-09-23 4 views
0

Jetty 9で実行されているCometDサーバーに大きなメッセージ(> 130k)を送信しようとしています。サーバーがこの大きなメッセージを受信すると、例外:受信した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サーバーで最大メッセージサイズを設定し、そのサーバーが実際にそのメッセージサイズを使用する方法を教えてください。

答えて

1

お客様のweb.xmlは正しいです、それが問題を解決する正しい方法です。

CometDテストスイートには、ws.maxMessageSizeパラメータが正しく動作することを確認するテストがあります。

CometDデモを変更してws.maxMessageSizeを追加してから、テストクライアントから大量のメッセージを送信したところ、完全に機能しました。

おそらく、パラメータ名に誤字があるか、パラメータをデフォルト値にリセットするものがありますか?

+0

実際には、タイプミスはありません(質問に付属のweb.xmlファイルを参照)。何らかの原因でパラメータがリセットされた場合は、スタートアップコードのどこかにある必要があります。私はどこのようなものを探しますか? web.xmlファイルが正しい場合、何がリセットを引き起こしたでしょうか? –

+0

Springを使って 'BayeuxServer'インスタンスやその他のメカニズムを作成していますか?これは 'web.xml'で定義された設定が効果を持たない理由を説明します。 – sbordet

関連する問題