6

こんにちは私は文字列を受け入れる必要があるハンドラーを備えたNettyサーバーを持っています。1024バイトまでのコンテンツしか受信できないようです。バッファサイズを増やすにはどうすればよいですか。私はすでに試しました

bootstrap.setOption("child.sendBufferSize", 1048576); 
bootstrap.setOption("child.receiveBufferSize", 1048576);

成功せずに。

ハンドラーは以下の通りです

public class TestHandler extends SimpleChannelHandler {


@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {

    ChannelBuffer buf = (ChannelBuffer) e.getMessage();

    String response = "";

    if (buf.readable()) {

        response = buf.toString(CharsetUtil.UTF_8);
        System.out.println("CONTENT: " + response);
    }

    System.out.println(response);


}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
    e.getCause().printStackTrace();

    Channel ch = e.getChannel();
    ch.close();
}

}

4

2 に答える 2

9

UDPを使用していますか?その場合、パケットは1024バイトで最大になります。このコードコメントは、QOTMコードサンプルに含まれています。

最大1024バイトのパケットを許可します(デフォルトは768)。この値を増減して、パケットの切り捨てを回避するか、メモリフットプリントをそれぞれ改善できます。

また、このオプションをどのように構成したかに関係なく、ルーターによって大きなUDPパケットが切り捨てられたりドロップされたりする可能性があることにも注意してください。UDPでは、ルーターの構成に応じて、パケットが特定のサイズよりも大きい場合、パケットは切り捨てられるかドロップされます。IPv4ルーターは切り捨てられ、IPv6ルーターは大きなパケットをドロップします。そのため、UDPで小さなパケットを送信しても安全です。

TCPを使用している場合は、youtハンドラーの前にフレームデコーダーと文字列デコーダーをパイプラインに追加する必要があります。このようなもの:

pipeline.addLast("frameDecoder", new DelimiterBasedFrameDecoder(80960, Delimiters.lineDelimiter()));
pipeline.addLast("stringDecoder", new StringDecoder(CharsetUtil.UTF_8));
pipeline.addLast("myHandler", new TestHandler());

MessageEventには実際に文字列が含まれるため、テストハンドラーを変更する必要があります。

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    String response = (String) e.getMessage();
    System.out.println(response);
}

わかる ?

于 2012-10-26T15:23:23.187 に答える
5

バージョン4.0.10では、UDPの最終バッファサイズは2048バイトに設定されています。

増やす場合は、ChannelOptionsを次のように設定します。

option(ChannelOption.SO_RCVBUF, int bytes)

そしてまた

option(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(int Bytes))
于 2013-12-05T06:00:38.507 に答える