用于ServerBootstrap的AbstractBootstrap#handler与ServerBootstrap#childHandler?

时间:2015-12-03 15:13:54

标签: netty

我想特别重申this一个和Manish Maheshwari的答案。记录在哪里

  

在编写基于Netty的客户端时,会使用handler中定义的AbstractBootstrap

  

根据childHandler中定义编写基于Netty的服务器 [use] ServerBootstrap

换句话说,

的区别在哪里
val b = new ServerBootstrap()
b.group(boss, wrkr)
 .channel(classOf[NioServerSocketChannel])
 .handler(new LoggingHandler(LogLevel.INFO))
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 .childHandler(new ChannelInitializer[SocketChannel]() {
   override def initChannel(ch: SocketChannel): Unit =
     ch.pipeline()
       .addLast(new LoggingHandler(LogLevel.INFO))
       .addLast(new StringDecoder())
       .addLast(new StringEncoder())
 })

val b = new ServerBootstrap()
b.group(boss, wrkr)
 .channel(classOf[NioServerSocketChannel])
 .childHandler(new ChannelInitializer[SocketChannel]() {
   override def initChannel(ch: SocketChannel): Unit =
     ch.pipeline()
       .addLast(new LoggingHandler(LogLevel.INFO))
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       .addLast(new StringDecoder())
       .addLast(new StringEncoder())
 })

1 个答案:

答案 0 :(得分:6)

handler频道注册频道处理程序 childHandler频道注册了一个频道处理程序 看似相同的处理程序在不同的渠道上听取事件并且具有不同的行为。

LoggingHandler的情况下,第一个记录父通道中发生的事件,包括端口绑定和接受新连接。所以它产生如下所示的日志(简化和评论):

  

//父频道注册
  INFO - [id: 0xb94a8e7c] REGISTERED
  //父通道绑定到localhost:8009
  INFO - [id: 0xb94a8e7c] BIND: 0.0.0.0/0.0.0.0:8009
  //父频道有效   INFO - [id: 0xb94a8e7c, L:/0:0:0:0:0:0:0:0:8009] ACTIVE
   //父通道接受新连接,创建了id为0xe507ce8f的子通道
  INFO - [id: 0xb94a8e7c, L:/0:0:0:0:0:0:0:0:8009] RECEIVED: [id: 0xe507ce8f, L:/0:0:0:0:0:0:0:1:8009 - R:/0:0:0:0:0:0:0:1:54398]

假设子通道读取请求中的数据,第二个记录器中的记录器将产生如下内容:

  

//注册儿童频道
  INFO - [id: 0x15fee362, L:/0:0:0:0:0:0:0:1:8009 - R:/0:0:0:0:0:0:0:1:55459] REGISTERED
  //儿童频道有效   INFO - [id: 0x15fee362, L:/0:0:0:0:0:0:0:1:8009 - R:/0:0:0:0:0:0:0:1:55459] ACTIVE
  //子通道收到7个字节的数据," hello \ r \ n"
  INFO - [id: 0x15fee362, L:/0:0:0:0:0:0:0:1:8009 - R:/0:0:0:0:0:0:0:1:55459] RECEIVED: 7B
  //记录接收数据的十六进制转储
   +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 68 65 6c 6c 6f 0d 0a |hello.. | +--------+-------------------------------------------------+----------------+