文章目录

  • 一、 Netty 线程模型
  • 二、 Netty 案例需求
  • 三、 IntelliJ IDEA 引入 Netty 包

一、 Netty 线程模型


1 . Netty 中的线程池 : Netty 中有两组线程池 , 分别是 BossGroup 线程池 和 WorkerGroup 线程池 ;

① BossGroup 线程池 : 负责客户端的连接 ;

② WorkerGroup 线程池 : 负责客户端连接的数据读写 ;

顾名思义 , 这两个线程池中存放线程 , 这两个线程池是 NioEventLoopGroup 子类 , NioEventLoop 就是其中的线程 ;

2 . NIO 事件循环组 ( NioEventLoopGroup ) 简介 :

① NioEventLoopGroup 基类 : BossGroup 和 WorkerGroup 都是 NioEventLoopGroup 的派生类 ;

② NioEventLoopGroup 作用 : 代表 NIO 事件循环组 , 这个组中有多个事件循环 , 每个事件循环都是一个 NioEventLoop ;

3 . NIO 事件循环 ( NioEventLoop ) 简介 :

① NIO 事件循环 ( NioEventLoop ) 本质 : 表示线程 , 在该线程中循环处理任务 ;

② NIO 事件循环 ( NioEventLoop ) 作用 : 每个 NIO 事件循环 ( NioEventLoop ) 都有 Selector 监听相应的客户端请求事件 ;

4 . NIO 事件循环组 ( NioEventLoopGroup ) 与 NIO 事件循环 ( NioEventLoop ) 对应关系 : 在一个 NIO 事件循环组 ( NioEventLoopGroup ) 中可以有 多个 NIO 事件循环 ( NioEventLoop ) , 在 Netty 中这个个数可以使用代码指定 ;

5 . BossGroup 线程池中的线程 NioEventLoop 执行步骤 :

① 监听连接 : 轮询监听客户端的 accept 连接请求事件 ;

② 处理流程 : 处理该 accept 客户端连接事件 ;

  • 建立连接 : 建立服务器与该客户端之间的连接 ;
  • 获取通道 : 获取 套接字通道 ( SocketChannel ) ;
  • 封装通道 : 将 SocketChannel 封装为 NioSocketChannel ;
  • 注册通道 : 将 NioSocketChannel 注册到 WorkerGroup 线程池中的某个 NioEventLoop 中的 Selector 上 ;

③ 任务队列 : 处理任务队列中的其它任务 ;

6 . WorkerGroup 线程池中的线程 NioEventLoop 执行步骤 :

① 监听数据 : 轮询监听客户端的 读 ( Read ) 写 ( Write ) 数据事件 ;

② 处理流程 : 处理该 读 ( Read ) 写 ( Write ) 数据 IO 事件 , 基于之前注册的 NioSocketChannel 处理 IO 事件 ;

③ 任务队列 : 处理任务队列中的其它任务 ;

7 . 管道 ( Pipeline ) : 管道 ( Pipeline ) 包含 通道 ( Channel ) , 通过 管道 ( Pipeline ) 可以获取到对应的 通道 ( Channel ) , 管道 ( Pipeline ) 中维护了很多 处理器 ( Handler ) ;

8 . 下图是 Netty 的线程模型 :

二、 Netty 案例需求


需求 : 简单的功能 ;

① 服务器端 : 监听 8888 端口 , 接收到客户端消息后 , 将消息原路送回 ;

② 客户端 : 向服务器发送 “Hello World” ;

三、 IntelliJ IDEA 引入 Netty 包


引入 Netty 包流程

1 . 打开工程结构 ( Project Structure ) 对话框 : 选择 File 菜单 -> Project Structure 选项 ;

2 . 选择导入方式 : 选择 Modules 选项卡 , 右侧选择 Dependencies 选项卡 , 选择右侧的加号 , 点击 2 Library… , 选择 From Maven … 从 Maven 导入 Netty 库 ;

3 . 搜索 Netty 库 : 在弹出的对话框中输入 io.netty:netty-all 内容 , 然后点击右侧的放大镜搜索按钮 ( 搜索很长时间 ) , 选择将依赖库下载到工程的 lib 目录下 , 同时下载源码和文档 ;

4 . 选择一个 Netty 版本 : 选择一个 Netty 版本 , 然后点击 OK 按钮 , 开始下载 , 下载速度很慢 ;

点击 OK 按钮后 , 开始下载 , 下载几十分钟 , 慢慢等 ;

5 . 配置库 : 下载完成后 , 会弹出 Configure Library 界面 , 下面的 3 个 jar 包都选择上 , 点击 OK , 就会在目录下生成 lib 目录 , 该目录下有 Netty 相关的依赖库 , 文档 , 源码 等内容 ;

6 . Netty 库 : 工程目录下的 lib 目录中存放着 Netty 的依赖库 , 文档 , 源码 ;

【Netty】Netty 入门案例分析 ( Netty 线程模型 | Netty 案例需求 | IntelliJ IDEA 项目导入 Netty 开发库 )相关推荐

  1. Netty实战七之EventLoop和线程模型

    简单地说,线程模型指定了操作系统.编程语言.框架或者应用程序的上下文中的线程管理的关键方面.Netty的线程模型强大但又易用,并且和Netty的一贯宗旨一样,旨在简化你的应用程序代码,同时最大限度地提 ...

  2. mysql安全性案例分析_MySQL实例crash的案例分析

    [作者] 王栋:携程技术保障中心数据库专家,对数据库疑难问题的排查和数据库自动化智能化运维工具的开发有强烈的兴趣. [问题描述] 我们生产环境有一组集群的多台MySQL服务器(MySQL 5.6.21 ...

  3. python财务案例分析考试答案_财务案例分析参考答案

    资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除. 财务案例分析期末复习题参考答案 四. 简答题 1. 可转换债券筹资与发行普通股或普通债券筹资有何不同 ? 答 : 从可转换债券自身特性看 ...

  4. 图解通信原理与案例分析-8:以太网通信案例及其物理层工作原理深入剖析--物理层编码

    前言: 以太网是一种计算机局域网通信技术,主要由介质访问层(MAC L2) 协议.物理层(PHY L1)协议.电子信号连接组成. MAC层主要有交换芯片实现,物理层由PHY芯片实现,电信号连接主要定义 ...

  5. Netty工作笔记0034---Netty架构设计--线程模型

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152

  6. 人工智能算法之梯度下降法、协同过滤、相似度技术、ALS算法(附案例分析)、模型存储与加载、推荐系统的冷启动问题

    梯度下降法 求解机器学习算法的模型参数,即无约束优化问题时,梯度下降法是最常采用的方法之一,另一种常用的方法是最小二乘法.这里对梯度下降法做简要介绍. 最小二乘法法适用于模型方程存在解析解的情况.如果 ...

  7. 电子商务平台下物流服务共享的策略分析(博弈论模型及案例)

    目 录 1 绪论 1 1.1 选题的背景和意义 1 1.1.1选题的背景 1 1.1.2 研究意义 2 1.2 国内外研究发展现状 2 1.2.1国内研究发展现状 2 1.2.2 国外研究情况 4 1 ...

  8. 计算机教学案例分析范文,高中信息技术教学案例 (2)范文.doc

    精.选 高中信息技术教学案例 霍红波 案例名称 用计算机解决生活中实际问题的方法 适用范围 高一年级下期<算法与程序设计>(选修模块) 课时 1课时 一.教学目标 1.课程标准中的相关内容 ...

  9. 计算机伦理问题案例分析,基于网络环境的案例教学在《计算机伦理学》中的实践研究...

    摘要: 在信息化浪潮及多种网络信息文化的影响下,加强信息伦理道德教育,提高大学生的职业道德修养,使他们能有效识别和履行其社会责任和道德责任,具有十分重要的意义.而案例教学法作为一种比较成熟的教学方法, ...

最新文章

  1. CentOS7服务器Docker构建ubuntu镜像出错invalid argument
  2. Android网络编程
  3. stl_vector.h
  4. 鼠标聚焦到Input输入框时,按回车键刷新页面原因及解决方法
  5. Android逆向:二进制xml文件解析 之 Start Tag Chunk
  6. java怎么获取城市气温_获取城市天气数据
  7. 160 - 11 Andrnalin.4
  8. 【51单片机快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取
  9. java 方法 示例_Java语言环境getDisplayVariant()方法与示例
  10. java 苹果h5不能播放_H5音频不能自动播放的问题
  11. java封装json串示例_Java JSON示例
  12. MVC解决Json DataGrid返回的日期格式是/Date(20130450000365)
  13. 面向对象12:==运算符和equals()方法、toString()方法
  14. poj2976(二分搜索,最大化平均值)
  15. 谷歌Chrome紧急更新补丁0day漏洞
  16. cass小插件集合_CAD面积插件大全_CAD插件大全_CASS插件大全_小懒人CAD插件老妈砂锅串串香加盟...
  17. 计算机学院主管学生日常工作的是,学生会的年度计划书(网络版)doc(完整版)...
  18. 深度:蚂蚁金融科技全面开放战略背后的技术布局
  19. 2020-12-07 Git 解决 git cherry-pick could not apply
  20. [理工科]使用Markdown在WordPress和OneNote中记笔记

热门文章

  1. 201671010456-张琼 实验二 词频统计软件项目报
  2. Android .mk文件语法解析
  3. 0050算法笔记——【线性规划】单纯形算法(未完全实现)
  4. 【Android】Touch事件分发
  5. http和HTTPS的区别及SSL介绍
  6. 数据绑定控件导出到excel
  7. Visual Studio 2010Beta与Silverlight的更新
  8. ROS多根adsl叠加负载均衡PCC的做法
  9. Microsoft Bot Framework 上手
  10. Full_of_Boys训练3总结