netty中 WebSocket协议的开发
http协议的开销 导致它们不适合用于 低延迟应用。
为了 解决这个问题,WebSocket将网络套接字 引入到 客户端和服务端, 浏览器和服务器之间 可以通过 套接字建立持久的连接, 双方随时都可以 互发数据给对方, 而不是之前的由 客户端控制的一请求 一应答的模式。
netty服务端创建时序图:
第一步: 创建 ServerBootStrap实例。 ServerBootStrap是netty服务端的启动辅助类, 它提供了一系列的方法 用于设置 服务端启动相关的参数。
第二步:设置并绑定Reactor线程池, netty的reactor线程池是 EventLoopGroup,实际上是 EventLoop 的数组。 EventLoop的职责是处理所有注册到本线程 多路复用器Selector上的 Channel , Selector的轮询操作 由绑定的EventLoop线程 run方法驱动, 在一个循环体内 循环执行。
第三步: 设置并绑定服务端Channel, 作为NIO服务端,需要创建ServerSocketChannel,
Netty对原生的类进行了封装,对应实现是 nioServerSocketChannel。
第四步:链路 建立的时候 创建并初始化ChannelPipeline。 ChannelPipeline 是一个处理网络事件的职责链。
第五步: 初始化ChannelPipeline后,添加并设置ChannelHandler。 ChannelHandler 是netty提供给用户定制和扩展的关键接口。
第六步:绑定并启动监听端口。在绑定监听端口之前,系统会做一系列的初始化和检测工作, 完成之后,会启动监听端口, 并将 ServerSocketChannel注册到Selector上 监听客户端连接。
第七步:Selector轮询, 由Reactor线程NioEventLoop负责调度和执行Selector轮询操作, 选择准备就绪的Channel集合。
第八步:当轮询到准备就绪的Channel之后, 就由 Reactor线程 NioEventLoop执行 ChannelPipeline的相应方法, 最终调度并执行ChannelHandler。
第九步:执行Netty系统 ChannelHandler和用户添加定制的ChannelHandler。 ChannelPipeline根据网络事件的类型,调度并执行ChannelHandler。
netty客户端创建时序图: