Netty 源码 Channel(一)概述
2024-09-04 16:21:29
Netty 源码 Channel(一)概述
Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html)
相关文章:
Channel 为 Netty 网络操作抽象类,EventLoop 主要是为 Channel 处理 I/O 操作,两者配合参与 I/O 操作。
Unsafe 是个内部接口,聚合在 Channel 中协助进行网络读写相关的操作。
1. Channel 功能
Channel 的功能主要功能如下:
- 网络 IO 功能:如 read、write、connect、bind、config、isActive、isOpen 等
- 其它:如 eventLoop(绑定的线程)、metadata(获取 TCP 配置参数)、parent(SocketChannel 的 parent 是 ServerSocketChannel)、id(唯一标识符)
2. Channel 创建
以 NioServerSocketChannel 创建过程为例。
// 创建 NIO 底层的 ServerSocketChannel 对象
public NioServerSocketChannel() {
this(newSocket(DEFAULT_SELECTOR_PROVIDER));
}
// NioServerSocketChannel 需要注册 OP_ACCEPT 事件
public NioServerSocketChannel(ServerSocketChannel channel) {
super(null, channel, SelectionKey.OP_ACCEPT);
config = new NioServerSocketChannelConfig(this, javaChannel().socket());
}
// 设置成非阻塞模式,并注册感兴趣的事件
protected AbstractNioChannel(Channel parent, SelectableChannel ch, int readInterestOp) {
super(parent);
this.ch = ch;
this.readInterestOp = readInterestOp;
ch.configureBlocking(false);
}
// 创建 channel 是创建对应的 pipeline
protected AbstractChannel(Channel parent) {
this.parent = parent;
id = newId();
unsafe = newUnsafe();
pipeline = newChannelPipeline();
}
NioServerSocketChannel 创建过程主要干了两件事,其配置信息保存在 NioServerSocketChannelConfig 中:
- 创建 JDK 底层的 ServerSocketChannel 对象
- 创建 ChannelPipeline
每天用心记录一点点。内容也许不重要,但习惯很重要!
最新文章
- 【原】iOS学习之图片拉伸处理(类似qq的气泡)
- MySQL——保证数据的完整性
- 机器学习&;数据挖掘笔记_13(用htk完成简单的孤立词识别)
- PHPCMS如何开启手机站点
- maven 的 scope的含义
- ItemsSource绑定后ScrollViewer不复位
- Debian Vi 简介
- 暑假学习日记:Splay树
- 菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源)
- jQuery之.html()和.text()区别
- 【Python3爬虫】第一个Scrapy项目
- 实现文件上传 你get了吗???
- 用return关键字实现1——100累加求和,返回总和并接收输出
- 91. Reverse Linked List 反转链表
- C#实现程序的版本升级更新
- MySQL 在各种程序语音的连接字符串(转)
- NoSQL文章
- java sundry tips
- php 必须了解提升的知识
- Dependency Property 依赖属性