使用DelimiterBasedFrameDecoder的可变服务器性能

时间:2012-06-22 17:06:54

标签: netty

我有一个服务器读取入站换行符分隔的字符串。管道如下所示:

    ...
    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 个答案:

答案 0 :(得分:0)

确实如此......只看一个便宜得多。