在开发一个服务端时并不是很难的, 甚至模式都是很相似的. 通过一个启动类ServerBootstrap将必要的参数和属性等设置好之后, 再通过一个bind方法就像一个导火索一样, 触发了Netty的启动.
NioServerSocketChannel
- 创建
- 初始化
- 注册
- 绑定
NioEventLoop
- 创建
- 启动
- 执行
在执行ServerBootstrap.bind方法之前,NioEventLoop已完成创建, 但还未启动和执行. 此时在执行bind的过程中, 进行NioServerSocketChannel创建和初始化. 而所谓的注册, 有两个层面含义, 第一个含义是Netty层面将NioServerSocketChannel和NioEventLoop进行关联, 第二层注册是JDK层面将channel和selector进行关联, 而就是这个第二层注册是通过任务的形式添加到NioEventLoop的MSPC队列中. 正是由这个第一个任务便启动了NioEventLoop. 之后的绑定接口操作也是以任务的形式添加到队列中.
NioEventLoop启动之后, 便开始了最重要的执行操作. 它是一个无限循环, 在循环中主要做三件事 :
- 监听事件
- 处理事件
- 处理队列中任务