在启动配置中的方法channel(NioServerSocketChannel.class)会创建一个ReflectiveChannelFactory并赋值给成员变量channelFactory。当调用绑定端口号方法bind(8899)

 

Channel和ChannelPipeline 创建

 

2.NioServerSocketChannel的构造函数

在构造函数中首先调用静态方法newSocket(),创建一个Java Nio ServerSocketChannel实例,它继承SelectableChannelChannel和ChannelPipeline 创建

 

然后调用父类AbstractNioChannel的构造函数,它会持有上一步创建的ServerSocketChannel实例并赋值给变量ch,同时配置为非阻塞ch.configureBlocking(false),如下:


Channel和ChannelPipeline 创建

1. ChannelPipeline的创建

查看父类AbstractChannel可以发现,在构造函数中,创建了ChannelPipeline,并赋值给pipeline对象.

 

Channel和ChannelPipeline 创建

chanel 通过变量pipeline持有ChannelPipeline

DeflautChannelPin的构造函数接受this为参数,因此ChanelPipe也持有Channel.

 

2.ChannelPpeline的拦截过滤器模式

ChannelPipeline 中可以添加多个ChannelHander:

Channel和ChannelPipeline 创建

 

Channel和ChannelPipeline 创建

接口提供了ChannelHandler的方法,如addFirst等,removeLast()等。

ChannelPipeline是线程安全的,可以随时添加或删除ChannelHandler。

channelPIpeine 中IO事件传播靠

3.channelPipelie 中添加处理耗时任务,有2种方式:

 

或者在自定义Handler中使用线程池ExecutorService处理。

 

相关文章:

  • 2022-12-23
  • 2021-04-30
  • 2021-09-30
  • 2021-12-06
  • 2021-06-15
猜你喜欢
  • 2021-08-18
  • 2021-06-29
  • 2021-07-08
  • 2021-10-13
  • 2021-06-23
  • 2021-11-22
  • 2021-06-27
相关资源
相似解决方案