Netty 源码 Channel(一)概述

Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html)

相关文章:

Channel 为 Netty 网络操作抽象类,EventLoop 主要是为 Channel 处理 I/O 操作,两者配合参与 I/O 操作。

Unsafe 是个内部接口,聚合在 Channel 中协助进行网络读写相关的操作。

1. Channel 功能

Channel 的功能主要功能如下:

  1. 网络 IO 功能:如 read、write、connect、bind、config、isActive、isOpen 等
  2. 其它:如 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 中:

  1. 创建 JDK 底层的 ServerSocketChannel 对象
  2. 创建 ChannelPipeline

每天用心记录一点点。内容也许不重要,但习惯很重要!

最新文章

  1. 【原】iOS学习之图片拉伸处理(类似qq的气泡)
  2. MySQL——保证数据的完整性
  3. 机器学习&数据挖掘笔记_13(用htk完成简单的孤立词识别)
  4. PHPCMS如何开启手机站点
  5. maven 的 scope的含义
  6. ItemsSource绑定后ScrollViewer不复位
  7. Debian Vi 简介
  8. 暑假学习日记:Splay树
  9. 菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源)
  10. jQuery之.html()和.text()区别
  11. 【Python3爬虫】第一个Scrapy项目
  12. 实现文件上传 你get了吗???
  13. 用return关键字实现1——100累加求和,返回总和并接收输出
  14. 91. Reverse Linked List 反转链表
  15. C#实现程序的版本升级更新
  16. MySQL 在各种程序语音的连接字符串(转)
  17. NoSQL文章
  18. java sundry tips
  19. php 必须了解提升的知识
  20. Dependency Property 依赖属性

热门文章

  1. 05_ssm基础(二)之mybatis优化
  2. java课后作业总结
  3. Java虚拟机1
  4. js 中的原型链与继承
  5. 使用 Actuator 监控
  6. spark快速开发之scala基础之2控制流程
  7. 【Scheme】树结构
  8. gitlab-ce 安装、汉化与阿里邮箱配置(注意是CE)
  9. BGRA与BGR的相互转换
  10. stm32 map文件的分析