我在HTTP内容中有带有protobuf消息的传入HTTP请求。到目前为止,我设法使用Snoop(HTTP服务器)示例并修改处理程序部分以将HTTP内容解析为protobuf消息并返回字节以进行输出。但我想这不是最佳方法。
是否可以在Netty中使用内置的Protobuf编码器/解码器?因此,第一个HTTPResponseDecoder(或更方便的东西)“切断”标题并仅将内容部分传递给FrameDecoder + ProtobufDecoder,然后将消息传递给应用业务逻辑的myAppHandler?
我有点困惑如何将消息(或其中的一部分)传递给下一个处理程序。或者我完全走错了轨道?
如果有任何内容,也许使用带有HTTP内容的protobuf示例的链接也可以作为解释。
Thnx提前。
答案 0 :(得分:1)
感谢您的默许支持:]
解决方案是使用HttpObjectAggregator()并使用聚合器处理程序中的FullHttpRequest编写一个处理字节到消息进程的处理程序。此解码器的输出是protobuf消息:
public class ProtoRequestDecoder extends MessageToMessageDecoder<FullHttpRequest> {
@Override
protected void decode(ChannelHandlerContext ctx, FullHttpRequest msg, List<Object> out) throws Exception {
byte[] payloadBytes = new byte[msg.content().readableBytes()];
msg.content().readBytes(payloadBytes);
MyMessage protoMessage = MyMessage.parseFrom(payloadBytes);
out.add(protoMessage);
}
}