Я пытаюсь справиться с Нетти.Я использую HTTP для своего примера здесь (я знаю, что в библиотеке есть HTTP (de / en) -кодеры, но смысл этого упражнения для меня - понять, как работает конвейер.
Iиметь простой конвейер, построенный следующим образом:
b.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel){
socketChannel.pipeline().addLast(new Announcer());
socketChannel.pipeline().addLast(new Receiver());
socketChannel.pipeline().addLast(new Source());
}
});
Извещатель MessageToByteEncoder<String>
с методом encode
:
@Override
protected void encode(ChannelHandlerContext ctx, String msg, ByteBuf out) {
byte[] bytes = msg.getBytes(CharsetUtil.US_ASCII);
out.writeBytes(bytes);
}
Источник ChannelOutboundHandlerAdapter
с методом read
:
@Override
public void read(ChannelHanderContext ctx) {
String path = "/";
String host = "xkcd.com"
String content = "GET " + path + " HTTP/1.1\n" +
"Host: " + host + "\n" +
"\n";
ctx.writeAndFlush(content);
}
Получатель - ByteToMessageDecoder
с методом decode
:
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
String e = in.toString(CharsetUtil.UTF_8);
System.err.println(e);
out.add(e);
}
Я проверил, что вывод Source является допустимым HTTP-запросом и получает ответfrom xkcd.com:80
Я вижу методы Source и затем Announcer, вызванные для генерации запроса, но Я никогда не вижу метод декодирования Receiver, называемый .
Почему?