八 netty學習之 handler,childhandler的困惑

  1. netty官方包裏帶的第一個例子,服務器

    客戶端那邊,發送了一個全0的消息到服務器,並且每次writeAndFlush以後addListener,這個listener的操做就是寫一樣的消息過去,依次循環ide

    服務器這裏,oop

.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沒有作任何操做..net

** 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] **3d

而放到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: 1024Bnetty

+-------------------------------------------------+
     |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |

+--------+-------------------------------------------------+----------------+code

|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 |................

**

既然能看出循環了,我只截取了前面的兩個.

  1. 客戶端這樣的不停的發送字節過來,每次發送的是256個字節的0,爲何服務器端這邊接收的是以1024個字節爲一次.

  2. 我以前看了一篇博客,上面寫執行inbound的handler線程到最後一個業務handler爲止,outbound就是worker組裏的另一個線程了,而據個人測試,發現,inbound和outbound的handler是在同一個線程的, inbound和outbound的handler是必須在同一個線程嗎?是隨機的?

4.netty裏提供了

ctx.executor().schedule

ctx.channel().eventLoop().schedule

這兩個方法能夠執行一個任務,經測試,這兩個方法的線程都是從worker線程池裏拿到的,在業務handler裏,我想處理較爲耗時的業務邏輯,好比訪問db,是用上述兩個方法,仍是本身建一個線程池,或是其餘方法?

相關文章
相關標籤/搜索