HTTP内容中的Netty和Protobuf

时间:2014-02-03 10:36:12

标签: http netty protocol-buffers

我在HTTP内容中有带有protobuf消息的传入HTTP请求。到目前为止,我设法使用Snoop(HTTP服务器)示例并修改处理程序部分以将HTTP内容解析为protobuf消息并返回字节以进行输出。但我想这不是最佳方法。

是否可以在Netty中使用内置的Protobuf编码器/解码器?因此,第一个HTTPResponseDecoder(或更方便的东西)“切断”标题并仅将内容部分传递给FrameDecoder + ProtobufDecoder,然后将消息传递给应用业务逻辑的myAppHandler?

我有点困惑如何将消息(或其中的一部分)传递给下一个处理程序。或者我完全走错了轨道?

如果有任何内容,也许使用带有HTTP内容的protobuf示例的链接也可以作为解释。

Thnx提前。

1 个答案:

答案 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);

    }
}