Netty源代码阅读
来源:互联网 发布:制造业数据分析 2016 编辑:程序博客网 时间:2024/05/22 13:26
JavaNio 模型
JavaNIO分NIO1.0和2.0,主要区别是同步非阻塞还是异步非阻塞,差别不大,主要是读写是由谁来完成的问题,业务模型基本类似
注册Key,监听端口,无限循环查询是否有读写事件(此处可阻塞),获取连接或者读取事件后进行处理(可在本线程内或者另起线程内进行处理)
Netty中对该功能的封装
可以这么理解,Netty对JavaNio进行了进一步的封装,用户不再关心接口监听,客户端连接等,通过接口ChannelHandler来约定用户感兴趣的事件
同时通过线程组分别处理端口连接监听和业务逻辑处理部分,处理逻辑更加清晰。设计到主要的类如下
EventLoopGroup 通用线程池,Nio主要对应 NioEventLoopGroup
其中处理客户连接主要在这里,这里会通过MultithreadEventExecutorGroup 中的 children 对象创建一组(默认为cpu核数*2)个大小的线程池,具体的线程对象 为NioEventLoop
NioEventLoop 业务处理线程
具体干活的线程就是他了,线程在初始化的时候打开连接,运行时,不断监听对应的SocketChannel对象,如有事件到来(读,写),则触发不同的处理逻辑
连接事件则触发NioServerSocketChannel,数据读取事件则触发 ServerSocketChannel,均为 doReadMessages方法
ServerBootstrap 服务端启动器
这里主要注册事件线程,业务处理ChannelHandler,这里有个非常有意思的地方,注册时大部分是一个ChannelInitializer类,只实现一个方法 initChannel,注册相应的事件处理Handler
Netty处理流程
ServerBootstrap 初始化之后,在调用bind方法后,开始执行初始化操作,创建NioServerSocketChannel对象,执行bind操作,当bind操作成功后,将 ServerBootstrap.ServerBootstrapAcceptor注册到事件处理管道中,之后开始监听端口,ServerBootstrap.ServerBootstrapAcceptor存在主要是缓存我们提供的ChannelHandler对象,如果有客户但连接过来时,为Selector.accept()方法获取的SocketChannel对象提供处理线程和处理Hanlder
- Netty源代码阅读
- Netty源码阅读
- Netty之源代码解析
- Netty之源代码解析
- Netty之源代码解析
- Netty源代码之FrameDecoder
- Netty之源代码解析
- 阅读源代码
- 源代码阅读
- 阅读源代码
- Netty源码阅读之一:综述
- 阅读Netty实战(精髓)笔记
- netty源代码解读-架构流程
- Netty 深入了解源代码分析
- Netty 深入了解源代码分析
- Netty 作为服务器端源代码剖析
- Netty之Channel源代码分析
- [转贴]如何阅读源代码
- 用dd实现linux硬盘备份
- C指针原理(29)-AT&T汇编
- jsp+servlet 实现登录功能
- iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem
- 电子相框遇到的问题
- Netty源代码阅读
- openfire 插件web 页面显示国际化
- 性格的自白
- delphi7IDE技巧
- FTPHelper-FTP帮助类,常用操作方法
- Qt 关闭窗口时循环依旧运行的解决办法
- 指标网页的载入光阴也会影响推行品质得分
- SGU133-Border (Sort)
- android 设备管理屏幕锁定实现方法