Netty从入门到放弃,从放弃在到入门

Nio的好文章:https://zhuanlan.zhihu.com/p/64537916?utm_source=wechat_session&utm_medium=social&utm_oi=660405125986914304

服务端Channel初始化过程
1. 通过 BootstrapChannelFactory 实例化 NioServerSocketChannel(实例化 Channel 的具体类型又是和在初始化 ServerBootstrap 时传入的 channel() 方法的参数相关)
a. 调用 NioServerSocketChannel.newSocket(DEFAULT_SELECTOR_PROVIDER) 打开一个新的 Java NIO ServerSocketChannel
b. 在 AbstractChannel(Channel parent) 中初始化 AbstractChannel 的属性:
parent 属性置为 null
unsafe 通过newUnsafe() 实例化一个 unsafe 对象
pipeline 是 new DefaultChannelPipeline(this) 新创建的实例
c. AbstractNioChannel 中的属性:
SelectableChannel ch 被设置为 Java ServerSocketChannel, 即 NioServerSocketChannel#newSocket 返回的 Java NIO ServerSocketChannel.
readInterestOp 被设置为 SelectionKey.OP_ACCEPT
SelectableChannel ch 被配置为非阻塞的 ch.configureBlocking(false)
d. NioServerSocketChannel 中的属性:
ServerSocketChannelConfig config = new NioServerSocketChannelConfig(this, javaChannel().socket())

2. NioServerSocketChannel 和 BossGroup 中 eventLoop 的 Selector 关联, 并将 Handler 添加到 NioServerSocketChannel 的 PipeLine中
a. 将 Handler 和 ServerBootstrapAcceptor 添加到 NioServerSocketChannel 的 PipeLine 中。
b. initAndRegister() 中的 ChannelFuture regFuture = group().register(channel); 这里的 register() 是指将 NioServerSocketChannel 和 BossGroup 关联。

3. NioSocketChannel 和 WorkGroup 中 eventLoop 的 Selector 关联
initAndRegister() 中的 init() 方法中会 new ServerBootstrapAcceptor()
a. 当有新的客户端连接请求时, ServerBootstrapAcceptor.channelRead 负责新建此连接的 NioSocketChannel。
b. ServerBootstrapAcceptor 的 channelRead() 方法会添加 childHandler 到 NioSocketChannel 对应的 pipeline 中。
c. 将此 NioSocketChannel 绑定到 workerGroup 中的某个 eventLoop 中。

原文地址:https://www.cnblogs.com/panning/p/12360864.html

时间: 2024-10-25 10:44:32

Netty从入门到放弃,从放弃在到入门的相关文章

git放弃修改&放弃增加文件

git放弃修改&放弃增加文件 1. 本地修改了一堆文件(并没有使用git add到暂存区),想放弃修改. 单个文件/文件夹: $ git checkout -- filename 所有文件/文件夹: $ git checkout . 2. 本地新增了一堆文件(并没有git add到暂存区),想放弃修改. 单个文件/文件夹: $ rm filename / rm dir -rf 所有文件/文件夹: $ git clean -xdf // 删除新增的文件,如果文件已经已经git add到暂存区,并不

【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

[Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感觉比较难以掌握的一个部分.Zigbee无线组网技术之所以让你感有学习难度,不是因为它真的复杂,而是它看起来很复杂,让人望而止步.另一方面则是Zigbee技术在应用层面上将硬件和软件完成融为一个体系,要求开发人员既要有扎实的硬件技术,又要有清晰的软件思维.    目前,尽管有不少关于Zigbee无线组

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

OPEN(SAP) UI5 学习入门系列之四:更好的入门系列-官方Walkthrough

好久没有更新了,实在不知道应该写一些什么内容,因为作为入门系列,实际上应该更多的是操作而不是理论,而在UI5 SDK中的EXPLORER里面有着各种控件的用法,所以在这里也没有必要再来一遍,还是看官方的用法更地道. 看一下基于最新的库所推荐的项目结构. 另外,我觉得对于初学者来说是一个非常好的消息,就是UI5版本从1.28更新到1.30以及更高之后,Tutorial系列有了重大更新,之前的Get Started->Tutorials->Application Best Practice现在改为

相比之前其他几个入门的, 推荐: 简单vue2 入门教程

注意:Vue.js 不支持 IE8 及其以下 IE 版本.       具体可以看下  http://www.runoob.com/vue2/vue-tutorial.html 以下是学习过程 Vue.js 教程 Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版本

计算机编程从入门到精通,如何才能快速入门

资料来源于网络搜索 [王西猛讲师的网络课堂] 学习计算机编程,难点有二:1.没有编程思路,即使学习了很长时间,也不能够开发一款完整的软件出来 2.要记忆的专业术语太多,造成记忆混乱 ,特别是学习复杂的编程语言更难.也就是说,编程入门很难. 所以在开始学习编程语言之前,需要有一个过渡的课程,来快速掌握编程思路.下面给大家介绍一款中文汉语编程开发平台,里面有详细完整的视频教程,半个月基本就可以开发一个简单的软件,初步熟悉编程思路之后然后再学习其他的复杂的编程语言,是很容易的.因为基本上编程语言开发的

入门实战《深度学习技术图像处理入门》+《视觉SLAM十四讲从理论到实践》

学习图像识别处理,想在数据分析竞赛中取得较高的排名,看了<深度学习技术图像处理入门>电子书,一边看电子书一边做标记,对配套的代码也做了测试,收获颇多. 从机器学习.图像处理的基本概念入手,逐步阐述深度学习图像处理技术的基本原理以及简单的实现. 学习理论后做实验,使用卷积神经网络进行端到端学习,构建深度卷积神经网络,使用循环神经网络改进模型,评估模型,测试模型.最关键的是可以将模型运用于实战之中,将深度学习模型导入到工程中,数据类型转换函数,实施CAM可视化,这是我最需要的. 视觉和图形学真是一

《入门图像处理》(一)计算机视觉入门

主要分为2个部分:opencv入门+tensorflow入门.穿插numpy+matplotlib入门知识 1.安装tensorflow1.10和opencv3.3.1: 安装tensorflow和opencv: pip install --upgrade --ignore-installed tensorflow==1.10 -i https://pypi.douban.com/simple/ pip install python-opencv -i https://pypi.douban.c

【Mybatis3学习入门】【二】Mybatis快速入门

一.准备开发环境 1.新建工程(SE和WEB工程均可),并添加jar包(mybatis和mysql驱动),添加junit测试库 2.准备mysql 数据库 表名:user 表结构: 数据: 版权声明:本文为博主原创文章,未经博主允许不得转载.

Python入门之装饰器九步学习入门

第一步:最简单的函数,准备附加额外功能 '''示例1: 最简单的函数,表示调用了两次''' def myfunc(): print("myfunc() called.") myfunc() myfunc() 第二步:使用装饰函数在函数执行前和执行后分别附加额外功能 '''示例2: 替换函数(装饰) 装饰函数的参数是被装饰的函数对象,返回原函数对象 装饰的实质语句: myfunc = deco(myfunc)''' def deco(func): print("before m