Netty 使用DelimiterBasedFrameDecoder的可变服务器性能
我有一个服务器正在读取入站新行分隔字符串。管道如下所示:Netty 使用DelimiterBasedFrameDecoder的可变服务器性能,netty,Netty,我有一个服务器正在读取入站新行分隔字符串。管道如下所示: ... pipeline.addLast("framer", new DelimiterBasedFrameDecoder(65535, Delimiters.lineDelimiter())); // plain old strings pipeline.addLast("decoder", new StringDecoder()); // callback to handle
...
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字符串/秒。查看源代码,它似乎会遍历所有分隔符以找到产生最小帧长度的分隔符——通过检查,我看不出仅查找一个分隔符如何比查找两个分隔符获得如此高的性能。我很想尝试写我自己的解码器,但我想了解这里发生了什么。如果您有任何见解,我们将不胜感激。事实正是如此。。只找一个便宜得多。好的,我就买那个。我已经编写了自己的解码器,它比上面的DelimiterBasedFrameDecoder快一点(~10%)。谢谢。