使用MessageToByteEncoder作为最后一个出站处理程序不会返回任何内容

时间:2014-07-30 14:06:52

标签: java netty

我有一个管道如下:

Preprocessor -> Decoder -> Encoder -> Processor

PreprocessorDecoderProcessor都是ChannelInboundHandlerAdapterEncoderMessageToByteEncoder<CommandResponse>

当我的请求(作为UDP数据报发送)被管道接收时,String将其解析为Preprocessor,并将String传递给Decoder }。 Decoder解析String以创建Command对象,并将生成的对象传递给ProcessorProcessor处理Command并生成CommandResponse对象,通过调用Encoder将其传递给ctx.writeAndFlush(commandResponse);Encoder将命令编码为字节数组,然后编码为ByteBuf,如下所示:

@Override
protected void encode(ChannelHandlerContext ctx, CommandResponse msg, ByteBuf out) throws Exception {
    //Encode the response
    String responseString;
    .....

    //Convert resulting string to bytes using specified charset
    byte[] bytes = responseString.getBytes(charset);

    //Send bytes
    out.writeBytes(bytes);
}

但是,发送方没有收到任何内容。

我确切地说我使用NioDatagramChannel作为频道和Netty版本4.0.x。

谢谢, 迈克尔

1 个答案:

答案 0 :(得分:0)

我猜写写调用返回的ChannelFuture失败了。检查一下。此外,当您使用NioDatagramChannel时,您很可能希望将CommandResponse转换为DatagramPacket。为此使用MessageToMessageEncoder。