着信改行区切り文字列を読み取るサーバーがあります。パイプラインは次のようになります。
...
pipeline.addLast("framer",
new DelimiterBasedFrameDecoder(65535, Delimiters.lineDelimiter()));
// plain old strings
pipeline.addLast("decoder", new StringDecoder());
// callback to handler
pipeline.addLast("handler", new ConnectorHandler(collector));
...
デコーダーを次のように変更すると:
pipeline.addLast("framer",
new DelimiterBasedFrameDecoder(65535,
new ChannelBuffer[] { ChannelBuffers.wrappedBuffer(
new byte[] {'\n'})}));
サーバー速度が 3 ~ 4 倍向上しました。なぜそうなるのか理解できません。インバウンド文字列の長さは約 1K ~ 4K の間で変化し、約 10K 文字列/秒です。ソースコードを見ると、すべての区切り文字を循環して、最小フレーム長を生成するものを見つけているようです。調べてみると、区切り文字を 1 つだけ探すと、 2 つの区切り記号。私は自分自身のデコーダーを書きたいと思っていますが、ここで何が起こっているのかを理解したいと思っています. 任意の洞察をいただければ幸いです。