Netty 4.1.0.Finalを使用していますが、メッセージがアウトバウンドハンドラを通過しないという問題に直面しています。私は1つのインバウンドと1つのアウトバウンドハンドラがあるサンプルプログラムを投稿しています。インバウンドハンドラは、ChannelHandlerContextでwriteAndFlushを使用します。これは、パイプラインで使用可能な最初の使用可能な送信ハンドラにメッセージを転送することです。メモリー管理は単純化のために無視されます。Nettyアウトバウンドハンドラが呼び出されない
ブートストラップコード
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.localAddress(12021)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new TestHandler1(), new TestOutHandler1());
}
});
ChannelFuture future = bootstrap.bind().sync();
System.out.println("Server Started...");
future.channel().closeFuture().sync();
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
System.out.println("Server Shutdown");
インバウンド・ハンドラコード
public class TestHandler1 extends ChannelInboundHandlerAdapter {
private static Log logger = LogFactory.getLog(TestHandler1.class);
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
logger.info("channelRead");
ctx.writeAndFlush(msg);
}
}
送信ハンドラコード
public class TestOutHandler1 extends ChannelOutboundHandlerAdapter {
private static Log logger = LogFactory.getLog(TestOutHandler1.class);
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
logger.info("write");
ctx.writeAndFlush(msg);
}
}
出力
INFO TestHandler1:channelRead
私が代わりにChannelHandlerContextのチャネル上writeAndFlush()を実行して以下のように私のインバウンドハンドラを変更した場合は、私が
が変更された期待される出力を取得しています着信Hanndler
public class TestHandler1 extends ChannelInboundHandlerAdapter {
private static Log logger = LogFactory.getLog(TestHandler1.class);
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
logger.info("channelRead");
ctx.channel().writeAndFlush(msg);
}
}
出力
INFO TestHandler1:channelRead
INFO TestOutHandler1は:下のリンクでノーマンの説明を1として
を書き、私がすべき(...)ChannelHandlerContext.writeとして理解します私の場合は唯一のアウトバウンドハンドラであるChannelOutboundHandlersを前に置いています。
私の理解が間違っているか、私は何をしないのですなら、私に教えてください。