我有一个管道如下:
Preprocessor -> Decoder -> Encoder -> Processor
Preprocessor
,Decoder
和Processor
都是ChannelInboundHandlerAdapter
。 Encoder
是MessageToByteEncoder<CommandResponse>
。
当我的请求(作为UDP数据报发送)被管道接收时,String
将其解析为Preprocessor
,并将String
传递给Decoder
}。 Decoder
解析String
以创建Command
对象,并将生成的对象传递给Processor
。 Processor
处理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。
谢谢, 迈克尔
答案 0 :(得分:0)
我猜写写调用返回的ChannelFuture失败了。检查一下。此外,当您使用NioDatagramChannel时,您很可能希望将CommandResponse转换为DatagramPacket。为此使用MessageToMessageEncoder。