我有一个服务器读取入站换行符分隔的字符串。管道如下所示:
...
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 字符串/秒。查看源代码,它似乎循环遍历所有定界符以找到产生最小帧长度的定界符 - 通过检查,我看不出只寻找一个定界符会比寻找两个分隔符。我很想尝试编写自己的解码器,但我想了解这里发生了什么。任何见解将不胜感激。