public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println(Thread.currentThread().getName());
System.out.println("ctx = " + ctx);
System.out.println("ctx.channel() = " + ctx.channel());
System.out.println("ctx.pipeline() = " + ctx.pipeline());
ctx.channel().eventLoop().execute(()->{
try {
Thread.sleep(7*1000);
ctx.writeAndFlush(Unpooled.copiedBuffer("小子,以后跟我混就行了001\r\n", CharsetUtil.UTF_8));
} catch (InterruptedException e) {
e.printStackTrace();
}
});
ctx.channel().eventLoop().execute(()->{
try {
Thread.sleep(5*1000);
ctx.writeAndFlush(Unpooled.copiedBuffer("小子,以后跟我混就行了002\r\n", CharsetUtil.UTF_8));
} catch (InterruptedException e) {
e.printStackTrace();
}
});
ctx.channel().eventLoop().schedule(()->{
try {
Thread.sleep(5*1000);
ctx.writeAndFlush(Unpooled.copiedBuffer("小子,以后跟我混就行了003\r\n", CharsetUtil.UTF_8));
} catch (InterruptedException e) {
e.printStackTrace();
}
},3, TimeUnit.SECONDS);
System.out.println("end----------------");
ByteBuf buf = (ByteBuf) msg;
System.out.println("client:"+((ByteBuf) msg).toString(CharsetUtil.UTF_8));
System.out.println("address:"+ctx.channel().remoteAddress());
}
执行结果
小子,以后跟我混就行了
/127.0.0.1:12312
小子,以后跟我混就行了001
/127.0.0.1:12312
小子,以后跟我混就行了002
/127.0.0.1:12312
小子,以后跟我混就行了003
这样只是延时操作。不在一个队列,但任然是顺序执行。单线程。
NioEventLoop内部是一个串行设计。
始终都是这个线程。