我计划使用Protocol Buffers with Netty4.0进行客户端和服务器之间的通信。我有不同类型的消息(例如:命令消息,状态消息,健康消息等)。根据API,我需要将消息/类的实例传递给ProtobufDecoder,我不能使用多个解码器来解码消息。如何解决这个问题?
以下是一些参考代码:
ChannelPipeline p = ch.pipeline();
p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder());
p.addLast("protobufDecoder", new ProtobufDecoder(WorldClockProtocol.LocalTimes.getDefaultInstance()));
p.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender());
p.addLast("protobufEncoder", new ProtobufEncoder());
感谢。
答案 0 :(得分:1)
在我的protobuf中,我有一个“cmd”字段用于各种命令。在我的处理程序中,这是一个切换案例声明来处理各种情况。
这就是我配置Initialzier的方法:
ChannelPipeline p = ch.pipeline();
p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder());
p.addLast("protobufDecoder", new ProtobufDecoder(Proto.Request.getDefaultInstance()));
p.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender());
p.addLast("protobufEncoder", new ProtobufEncoder());
p.addLast("handler", new ClientHandler());
在处理程序内部,
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception{...}
我有一个Switch Case statemt用于评估我在Object中的msgTyp(在这种情况下是Protobuf)