netty启动流程
2021-11-12 11:41:34 0 举报
AI智能生成
登录查看完整内容
1
作者其他创作
大纲/内容
netty是一个异步、事件驱动的客户端/服务端网络框架,基于Java nio,隐藏了其内部复杂性,提供易于使用的api,可以在其基础上开发多种网络协议
直接开发nio程序需要解决断线重连,心跳检测,粘包半包,网络拥塞,异常处理等问题,而netty对其进行了良好的封装,解决了上诉问题,且拥有高并发,零拷贝等特点
创建executor,默认是ThreadPerTaskExecutor
NioEventLoopGroup的创建
主线程
往NioServerSocketChannel的pipeline中添加ServerBootstrapAcceptor
ServerSocketChannel注册进boss EventLoop的selector
ServerSocketChannel绑定端口号,从tail开始触发read事件,开始接收OP_ACCEPT事件
向boss EventLoop的taskQueue添加任务
依次执行taskQueue中的任务,然后selector.select阻塞响应accept事件
服务端绑定
boss EventLoop线程
fireChannelRead事件,被ServerBootstrapAcceptor.channelRead拦截,它会向NioSocketChannel的pipeline中添加在ServerBootStrap.child设置的childHandler
SocketChannel注册进worker EventLoop 的selector,接收OP_READ事件
向worker EventLoop的taskQueue添加任务
依次执行taskQueue中的任务,然后selector.select阻塞响应read事件
接收连接
boss EventLoop线程
worker EventLoop线程
selector的read事件被响应后,font color=\"#0000ff\
读取数据
worker EventLoop线程
unsafe.read时,由于NioServerSocketChannel继承了AbstractNioMessageChannel,NioSocketChannel继承了AbstractNioByteChannel,所以行为不同,前者read是serversocketchannel.accept建立连接,后者是socketchannel.read读取数据
channelHandler的添加和移除:调用pipeline的addXX方法时,会调用channelhandler.handlerAdded方法,而ChannelInitializer的handlerAdded会调initChannel完成用户自定义channel的添加,并把自身移除
其他说明
netty启动流程
自由主题
0 条评论
回复 删除
下一页