-
netty官方包里带的第一个例子,
客户端那边,发送了一个全0的消息到服务器,而且每次writeAndFlush之后addListener,这个listener的操作就是写同样的消息过去,依次循环
服务器这里,
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) {
ChannelPipeline p = ch.pipeline();
if (sslCtx != null) {
p.addLast(sslCtx.newHandler(ch.alloc()));
}
// p.addLast(new LoggingHandler(LogLevel.INFO));
p.addLast(new DiscardServerHandler());
}
});
这个LoggingHandler的方法
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (logger.isEnabled(internalLevel)) {
logger.log(internalLevel, format(ctx, "RECEIVED", msg));
}
ctx.fireChannelRead(msg);
}
意思是,每读一个消息,就打印一次日志.然后传到下一个handler里,这里的handler没有做任何操作.
** 1. 为什么这个LoggingHandler放在handler()里就只执行一次,**即打印
** 16:56:24.374 [nioEventLoopGroup-0-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x25e5364a] REGISTERED 16:56:24.383 [nioEventLoopGroup-0-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x25e5364a] BIND: 0.0.0.0/0.0.0.0:8009 16:56:24.386 [nioEventLoopGroup-0-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x25e5364a, /0:0:0:0:0:0:0:0:8009] ACTIVE 16:57:13.515 [nioEventLoopGroup-0-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x25e5364a, /0:0:0:0:0:0:0:0:8009] RECEIVED: [id: 0xe6b752e0, /127.0.0.1:49281 => /127.0.0.1:8009] **
而放到childHandler里,打印的是
** 17:09:35.028 [nioEventLoopGroup-1-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x43de73d7, /127.0.0.1:49827 => /127.0.0.1:8009] REGISTERED 17:09:35.032 [nioEventLoopGroup-1-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x43de73d7, /127.0.0.1:49827 => /127.0.0.1:8009] ACTIVE 17:09:35.067 [nioEventLoopGroup-1-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x43de73d7, /127.0.0.1:49827 => /127.0.0.1:8009] RECEIVED: 1024B
+-------------------------------------------------+
| 0 1 2 3 4 5 6 7 8 9 a b c d e f |
+--------+-------------------------------------------------+----------------+
|00000000| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000010| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000020| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000030| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000040| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000050| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000060| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000070| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000080| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000090| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000a0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000b0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000c0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000d0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000e0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000f0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000100| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000110| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000120| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000130| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000140| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000150| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000160| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000170| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000180| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000190| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000001a0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000001b0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000001c0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000001d0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000001e0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000210| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000220| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000230| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000240| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000250| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000260| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000270| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000280| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000290| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000002a0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000002b0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000002c0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000002d0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000002e0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000002f0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000300| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000310| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000320| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000330| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000340| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000350| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000360| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000370| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000380| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000390| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000003a0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000003b0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000003c0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000003d0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000003e0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000003f0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
+--------+-------------------------------------------------+----------------+
17:09:35.069 [nioEventLoopGroup-1-0] INFO i.n.handler.logging.LoggingHandler - [id: 0x43de73d7, /127.0.0.1:49827 => /127.0.0.1:8009] RECEIVED: 1024B
+-------------------------------------------------+
| 0 1 2 3 4 5 6 7 8 9 a b c d e f |
+--------+-------------------------------------------------+----------------+
|00000000| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000010| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000020| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000030| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000040| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000050| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000060| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000070| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000080| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |00000090| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000a0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000b0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |000000c0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................
**
既然能看出循环了,我只截取了前面的两个.
-
客户端这样的不停的发送字节过来,每次发送的是256个字节的0,为什么服务器端这边接收的是以1024个字节为一次.
-
我之前看了一篇博客,上面写执行inbound的handler线程到最后一个业务handler为止,outbound就是worker组里的另外一个线程了,而据我的测试,发现,inbound和outbound的handler是在同一个线程的, inbound和outbound的handler是必须在同一个线程吗?是随机的?
4.netty里提供了
ctx.executor().schedule
ctx.channel().eventLoop().schedule
这两个方法可以执行一个任务,经测试,这两个方法的线程都是从worker线程池里拿到的,在业务handler里,我想处理较为耗时的业务逻辑,比如访问db,是用上述两个方法,还是自己建一个线程池,或是其他方法?