我想特别重申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())
})
答案 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.. | +--------+-------------------------------------------------+----------------+