netty up卵が痛いこと

1332 ワード

2012-1-29
卵が痛いnetty UDP receive BufferSize
 
nettyのNioDatagramWorkerには、受信パケットキャッシュの最大サイズが割り当てられています.デフォルトでは768 Bytesで、卵痛は768 Bを初めて受信した後、第2回キャッシュは768 B*2 bufferに拡張されています.最初のパケットの前の部分のデータは768 Bで、後の768 Bは第2のパケットの前の部分のデータです.変なのは:http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/socket/DatagramChannelConfig.html中にはreceiveBufferSizeがありますが、設定後は無効です.何回か試みた後、receiveBufferSizePredictorを設置しなければならないことが分かりました. またはreceiveBufferSizePredictorFactory この受信パケットキャッシュのサイズを変更することができます.例えば:
bootstrap.setOption("receiveBufferSize", 1048576);
bootstrap.setOption("receiveBufferSizePredictor", new FixedReceiveBufferSizePredictor(1048576));
// bootstrap.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1048576));
もう一つの卵が痛いところにツッコミを入れます.バックパッキングを受信した場合、強制的に送信する方法はなく、全体を待つ必要があります.messageReceived方法で戻ったら、カバンを書きます.例えば:
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
  ...
  e.getChannel().write(responsePacket); // not send out now
  Thread.sleep(30000L);
  ...
}
上記のコードの中でresponsePacketは書き返す時にすぐに送るのではなく、30秒の方法が終わってから出すのです.
もちろんです.このようにしても、カバンを受け取ったら新しいスレッドでデータを処理するように強制されますが、少なくとも文書でもはっきり言います.