6

「receiveBufferSize」オプションを1024に設定しましたが、何らかの理由で、messageReceivedでまだ768バイトしか取得されていません。データのヘッダーは、送信されるデータのサイズが1004であることを示しています。

サーバーの初期化コードは次のとおりです。

public static void main(String[] args) throws Exception {
    ConnectionlessBootstrap b = new ConnectionlessBootstrap(new NioDatagramChannelFactory());

    // Options for a new channel        
    b.setOption("receiveBufferSize", 1024);
    System.out.println(b.getOptions());

    b.setPipelineFactory(new ChannelPipelineFactory() {

        @Override
        public ChannelPipeline getPipeline() throws Exception {
            return Channels.pipeline(
                    new MyUDPPacketDecoder(),
                    new StdOutPrintHandler());
        }
    });

    b.bind(new InetSocketAddress(myPort));
}
4

1 に答える 1

10

追加のオプション(receiveBufferSizePredictorFactory)を設定する必要があります。

着信メッセージを保持するために割り当てる必要のあるスペースの量を予測するために、nettyは割り当てるバイト数を予測する予測子を使用します。

受信バッファサイズ予測子には、適応型と固定サイズの2種類があります。予測子は、ブートストラップによって作成されたチャネルごとに1つ作成する予測子ファクトリによって作成されます。

ブートストラップに予測子ファクトリが設定されていない場合(またはチャネルに予測子が手動で設定されていない場合)、チャネルはデフォルトの768バイトの固定サイズ予測子を使用します。768バイトを超えるすべてのメッセージは、そのサイズに縮小されます。

あなたは付け加えられます:

b.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1024));

nettyのドキュメントで予測子とそのファクトリについて読むことができます

ReceiveBufferSizePredictorインターフェース

ReceiveBufferSizePredictorFactoryインターフェイス

于 2012-07-23T13:42:09.333 に答える