2012-08-17 70 views
1

有什么方法可以设置多个protobufEncoder/protobufDecoder吗?Protobuf和Pipeline问题

让我解释一下我的疑难问题具有将从 客户端向服务器发送一个命令,服务器获取指令并做根据 到command.Now响应(“答案”)的一些工作该服务器可以是: 字符串的长度,或者是整数平方(顺序不确定)

我的问题是,现在我能做些什么,该客户端可以从服务器接收至少两个 不同的反应?两者都是使用Protobuf和 进行“编码”,我需要做的是服务器可以发送至少两个不同的 响应?也都是用Protobuf“编码”。两者都是带有protobuf的“解码器”。

netty的ProtobufDecoder设置两个不同的protobufEncoder /解码器是不可能的。

让我们来看看下面的网状例如,解码器只能接收解码器对象

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; 
} 

在此先感谢和最诚挚的问候。

石英

回答

0

您可以随时调整ChannelPipeline。这应该可以帮助你。只需在需要时添加/删除正确的一个。

+0

如果我用包络协议包装protobuf消息。例如: 。添加一个编码器和解码器,其目的是为protobufEncoder和protobufDecoder添加一个消息头。 感觉如何? – zhanghua 2012-08-17 07:17:36