2015-10-27 20 views
13

私はSockJSでSpring-Websockets 4.2を使用しています。Spring-Websocket 4.2でSockJSを使った部分的なメッセージ4.2

クライアントが受信したメッセージは非常に大きくなる可能性があるため、部分的なメッセージを使用したいと思います。 TextWebSocketHandlerの私のサブクラスは、trueを返すためにsupportsPartialMessagesをオーバーライドします。しかし、Springによって作成されたSockJsWebSocketHandlerは部分的なメッセージをサポートしていないので、私はまだエラーcode=1009, reason=The decoded text message was too big for the output buffer and the endpoint does not support partial messagesを取得します。

回避策として、hereのようにバッファサイズを1 MBに増やしましたが、かなりの数のクライアント(同時に〜2000)をサポートする必要があるため、メモリが多すぎます。

SockJSで部分メッセージを使用する方法はありますか?

+0

これを解決できましたか?私も同じ問題に直面しており、解決策を見つけることができませんでしたか?また、 'container.setMaxTextMessageBufferSize(16384)'に記載されている数字は、ビット数、バイト数、または何バイトですか? – BiJ

+0

いいえ、残念ながらそうではありません。私たちは、送信者をチャンクし、受信者に再組み立てすることによって、部分的なメッセージングを実装することになりました。 setMaxTextMessageBufferSizeのバイト数はAFAIKです。 – Jan

+0

スティッキーセッションのようなロードバランサを使用してメッセージを分割できますか?レスキューストリームを実装する必要があるか、メッセージを処理するために通常のソケットの外側にある適切なスケールアウトメッセージキューを使用する必要があるようです。 –

答えて

0

あなたがしようとしていることを見ると、本質的に並行メッセージ用に2GB(1MBと仮定)がRAMにバッファされています。インフラストラクチャを変更したり、垂直方向に拡大したり、メッセージストリームを圧縮したりする必要があります。

1)スティッキセッションで内部ロードバランシングを使用して、異なるサーバーインスタンス間の同時ユーザー数を分割するかどうかを確認してください。または...

2)単一のサーバーから取得できるリアクティブストリーミングを使用して、適切なスケールアウトメッセージキューを実装します。

お使いのアプリケーションのアーキテクチャはよく見えません。

関連する問題