Я экспериментирую с пользовательским обработчиком исходящих сообщений в Netty 4 и не могу заставить его работать. Обработчик просто регистрирует оператор и добавляется к нижней части конвейера канала. Я понимаю, что эти обработчики вызываются снизу вверх, чтобы, как только была выписана операция записи. Идея с пользовательским обработчиком заключалась в том, что он будет выполнен до любых других обработчиков исходящих сообщений.Netty 4 Outbound Message Handler Закрывающее соединение
К сожалению, когда я добавляю этот обработчик ведения журнала к конвейеру, я вижу оператор журнала, но затем Netty, кажется, немедленно закрывает соединение. Вот мой инициализатор канала и код исходящего обработчика.
HttpOutboundHandler.java
public class HttpOutboundHandler extends ChannelOutboundMessageHandlerAdapter<DefaultFullHttpResponse> {
private static final Logger logger = LoggerFactory.getLogger(HttpOutboundHandler.class);
@Override
public void flush(ChannelHandlerContext context, DefaultFullHttpResponse response)
throws Exception {
logger.debug("Executing outbound handler.");
}
}
HttpChannelInitializer.java
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpObjectAggregator(1048576);
pipeline.addLast("compressor", new HttpContentCompressor(gzipLevel));
pipeline.addLast("outboundHandler", outboundHandler);
pipeline.addLast(eventExecutorGroup, "inboundHandler", inboundHandler);
}
Наконец, вот выход регистратора.
[DEBUG] (Slf4JLogger:71) - [id: 0xbddf00cf, /0:0:0:0:0:0:0:1:57402 => /0:0:0:0:0:0:0:1:8080] ACTIVE
[DEBUG] (HttpOutboundHandler:19) - Executing outbound handler.
[DEBUG] (Slf4JLogger:71) - [id: 0x942993c1, /0:0:0:0:0:0:0:1:57403 :> /0:0:0:0:0:0:0:1:8080] INACTIVE