Protobuf和Pipeline问题

时间:2012-08-17 02:00:51

标签: protocol-buffers netty

有没有办法设置多个protobufEncoder / protobufDecoder?

让我解释一下我的问题。我有一个命令将从中发送 客户端到服务器,服务器获取命令并做一些工作 命令。现在服务器的响应(“回答”)可能是: 对于字符串的长度或对于整数方块(顺序不确定)

我现在的问题是:我能做些什么,客户至少可以收到两个 来自服务器的不同响应?两者都用Protobuf“编码” 反过来,我需要做的是服务器可以发送至少两个不同的 两个都是用Protobuf“编码”的。两个都是protobuf的“解码器”。

netty的ProtobufDecoder设置两个不同的protobufEncoder / Decoder是不可能的。

让我们看下面的netty示例,解码器只能接收解码器对象

LocalTimeServerPipelineFactory:

public ChannelPipeline getPipeline() throws Exception {
    ChannelPipeline p = pipeline();
    p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder());
    p.addLast("protobufDecoder", new ProtobufDecoder(LocalTimeProtocol.Locations.getDefaultInstance()));

    p.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender());
    p.addLast("protobufEncoder", new ProtobufEncoder());

    p.addLast("handler", new LocalTimeServerHandler());
    return p;
}

提前感谢和最好的问候。

石英

1 个答案:

答案 0 :(得分:0)

您可以动态调整ChannelPipeline。这应该对你有所帮助。只需在需要时添加/删除正确的。