イベント発行時の引数の最大サイズはありますか?
私はこのコード(Java)を使用します:wampClient.publish(token, response.toString());
response.toString()
私の場合、長いjson文字列です。約70,000文字あります。response.toString()
短い文字列に置き換えると、イベントが期待どおりに発行されるため、イベントが発行されないのではないかと疑っています。
私は Wamp の内部構造についてあまり知りませんし、コードへの最初のデバッグ セッションではあまり洞察が得られませんでした。上で述べたように、長い文字列が問題を引き起こしていると思います。
最小限の実行例: 最小限の実行例を取得するには、 http ://we.tl/a3kj3dzJ7N から Java プロジェクトの例をダウンロードし、IDE にインポートしてください。
demo フォルダには 2 つの .java ファイルがあります。両方Client.java
をServer.java
実行/開始すると、それぞれに GUI が表示されます。次に、次の手順を実行します (C = クライアント、S = サーバー)。
C: hit start
S: hit start
C: hit publish
メッセージのサイズに応じて、IDE のコンソールに異なる出力が表示されます。メッセージのサイズは、整数変数を介して の137 行で変更できます。上で既に説明したように:が 70000 より小さい場合 (例: 60000)、すべてが期待どおりに機能します。のコンソール出力は次のようになります。Client.java
size
size
Client.java
Open Client
Session1 status changed to Connecting
Session1 status changed to Connected
Publishing
Received event test.event with value 10000
ただし、整数変数size
を 70000 (またはそれ以上) に変更すると、出力は次のようになります。
Open Client
Session1 status changed to Connecting
Session1 status changed to Connected
Publishing
Completed event test.event
Session1 status changed to Disconnected
Session1 status changed to Connecting
Session1 status changed to Connected
ご覧のとおり、Received イベント ...が欠落しているため、イベントは受信されません。ただし、完了したイベント test.eventがありますが、明らかにデータが欠落しています。
要約すると、上記の例を実行すると、送信された文字列のサイズが 70000 を超えるとイベントが正しく受信されないことがわかります。この問題はnettyに関連している可能性があります。どんな助けでも大歓迎です。たぶん、この問題を解決できる小さな構成です。
EDIT 1:ダウンロード可能な最小限の実行例で質問を更新しました。
EDIT 2:問題の根本を知っていると思います(完全にはわかりませんが、EDIT3を参照してください)。これは、Java の文字列リテラルの許容サイズに関連しています。参照: Java の初期化文字列のサイズ 上記の例では、それを反映できます。サイズ変数が 65535 文字未満の場合は機能しますが、そうでない場合は機能しません。これに対する回避策はありますか?
編集 3 別名ソリューション:開発者が提案したように (ここを参照)、 NettyWampConnectionConfig.java:8の変数DEFAULT_MAX_FRAME_PAYLOAD_LENGTH
をより高い値に変更する必要があります。その後、すべてが魅力のように機能します。