带字符串的消息的Netty编解码器

时间:2014-07-25 23:13:01

标签: netty codec kryo

我怀疑我的Netty 4.0.19客户端服务器应用程序性能缓慢的编解码器不好。简单的消息对象由一个整数id和两个字符串及其伴随长度组成。 我在ReplayingDecoder中使用CharsetDecoder从字节中获取字符串:

msg.value = charsetDecoder.decode(in.readBytes(msg.valueLen).nioBuffer()).toString();
checkpoint(CDRMessageDecoderState.FIELD_MASK_METHOD);

在ByteToMessageDecoder中我使用快速Kryo库进行序列化(可以避免在这里创建间接堆缓冲区吗?):

protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) throws Exception 
{
    if (!buffer.isReadable())
        return;

    // read header
    if (contentSize == 0) {
        contentSize = buffer.readInt();
    }

    if (buffer.readableBytes() < contentSize) {
        return;
    }

    // read content
    byte [] buf = new byte[buffer.readableBytes()];
    buffer.readBytes(buf);
    Input in = new Input(buf);
    out.add(kryoCodec.readObject(in, CDRMessage.class));
    contentSize = 0;

}

目前,ReplayingDecoder似乎在某种程度上优于ByteToMessageDecoder。 另外,我在DefaultEventExecutorGroup中运行了一些简单的后端逻辑(所以我不认为它会阻塞事件线程),它查找HashMaps并使用writeAndFlush将消息写入ChannelHandlerContext。 感谢名单

0 个答案:

没有答案