Netty源码阅读入门实战(五)-新连接检测

简介: 1 检测新连接打断点telnet 此机地址,引起连接建立执行到此,进入查看以上即对应 read 方法...
## 1 检测新连接 ![](https://img-blog.csdnimg.cn/img_convert/46697efa98936b080bcc501bfe543ac8.png) ![打断点](https://img-blog.csdnimg.cn/img_convert/230c5726ce68af5d0a639b7209c1eccd.png) telnet 此机地址,引起连接建立 ![执行到此,进入查看](https://img-blog.csdnimg.cn/img_convert/002ef797349dc5e34bbd19db30c6f9a3.png) ![](https://img-blog.csdnimg.cn/img_convert/b8150e9f7441d49617b42f563b6c483c.png) ![](https://img-blog.csdnimg.cn/img_convert/b6611aade7fc9ba7f5e78e4b2d914d81.png) ![以上即对应 read 方法](https://img-blog.csdnimg.cn/img_convert/3c45bdd820ef353e713addc976590bb0.png) ![](https://img-blog.csdnimg.cn/img_convert/6b66f1768be5fd6c2004d4c704156e0e.png) ![](https://img-blog.csdnimg.cn/img_convert/44a4202fcd0782bc76a6cfffc69292cc.png) ![](https://img-blog.csdnimg.cn/img_convert/93c6a9c976d26bfb5c24f75b98ad1a64.png) ![](https://img-blog.csdnimg.cn/img_convert/1ffcca95c36dec4bce1aee06074aeffb.png) 继续返回原先位置 ## 2 创建NioSocketChannel ![](https://img-blog.csdnimg.cn/14433cae59a54c5ebee99f1391d5803a.png) ![](https://img-blog.csdnimg.cn/img_convert/5a605e7680efa38e46b503e5b1c4a5df.png) ![](https://img-blog.csdnimg.cn/img_convert/4f1ab234d200a7728439715a7c79c881.png) ![](https://img-blog.csdnimg.cn/img_convert/1feddd209b67f82255efc02a001b2c1e.png) ![](https://img-blog.csdnimg.cn/img_convert/6ebd084078e4eb4212c7e5f393a9dce8.png) ![](https://img-blog.csdnimg.cn/img_convert/dbff4c9c61721898ffec0e8fbed51d91.png) ![](https://img-blog.csdnimg.cn/img_convert/dee9566c5478aed567b77ae59ed7745a.png) ![](https://img-blog.csdnimg.cn/img_convert/68f75f3459edb4f192dfa94a2237add8.png) 禁止小包组成大包再发送方法 ![](https://img-blog.csdnimg.cn/img_convert/55e116e8275976216d8b72ede3f9660d.png) ![](https://img-blog.csdnimg.cn/img_convert/9d4980f5dee0059911dd821fa6ba71ae.png) 静态变量: ![](https://img-blog.csdnimg.cn/img_convert/6d647ef4de4fd389751de87511221f15.png) ![](https://img-blog.csdnimg.cn/img_convert/6eb73e471dd1131e657495e44319f009.png) ![](https://img-blog.csdnimg.cn/img_convert/31d2e5995057a03117edbc4cf7849980.png) ![](https://img-blog.csdnimg.cn/img_convert/514d340395c4a81ce8df8adad6052a70.png) 由于 netty 常部署在服务端,所以默认启动TCP无延时 ![](https://img-blog.csdnimg.cn/img_convert/1f045c986c25e81729b036d354a09dcc.png) ![](https://img-blog.csdnimg.cn/img_convert/7105afc998fe380784b2e715270d05d6.png) ![](https://img-blog.csdnimg.cn/img_convert/be44383c1155ba590a5a5e00385263c1.png) ## 3 Channel的分类 - NioServerSocketChannel - NioSocketChannel - Unsafe ![](https://img-blog.csdnimg.cn/img_convert/2f520f44b64aa53a0b780c8a1db8a0f8.png) 顶层框架 Channel: ![](https://img-blog.csdnimg.cn/img_convert/700f0a7e6547bc8e90ddd24a3035eac9.png) 网络 Socket 读写绑定的一种抽象: ![](https://img-blog.csdnimg.cn/img_convert/5c3b905aa92e572c30b8ca2bb8983f00.png) ![作为骨架,保存了很多基础且重要的信息](https://img-blog.csdnimg.cn/img_convert/8aa44c928c48140c6a8d50728f3e9e5c.png) ![](https://img-blog.csdnimg.cn/img_convert/0ef7e856b65bbe032fc4df035bf0e5f9.png) ![](https://img-blog.csdnimg.cn/img_convert/ced4a59cfb6b2ecdaf108d6a1e63893b.png) 使用选择器监听 IO 事件的一个抽象类。保存了 JDK 底层的一个 Channel: ![开启非阻塞模式](https://img-blog.csdnimg.cn/img_convert/9e02223d4011415cc2227cf4d9a1e44d.png) ![](https://img-blog.csdnimg.cn/img_convert/6111ded1e7cdd0db7849791726471538.png) ![](https://img-blog.csdnimg.cn/img_convert/74e6e5aaf3b052efc0a3260173fc289d.png) ![](https://img-blog.csdnimg.cn/img_convert/fc481b0246bb9c4b9290789fa1603cba.png) ![回到了抽象类,即保存了一个ACCEPT 事件](https://img-blog.csdnimg.cn/img_convert/87c36d163acbd29ca77c5b5a004d6479.png) 看过服务 Channel 后,再看 ## 客户端 Channel ![](https://img-blog.csdnimg.cn/img_convert/72978bb979da0b02fc20e6a2056ab23c.png) ![](https://img-blog.csdnimg.cn/img_convert/f40399f08e7daecbd843e2f90852c9b5.png) ![](https://img-blog.csdnimg.cn/img_convert/8591303ac78446a0b02cee936f4bac0b.png) ![](https://img-blog.csdnimg.cn/img_convert/ba97157f387cbb1fcd0e6acdbf5afebb.png) ![](https://img-blog.csdnimg.cn/img_convert/d25ff0ee8e17386b977468fbef58b6a3.png) ## 客户端 V.S 服务端Channel ### unsafe 类不同 客户端 Chanel ![](https://img-blog.csdnimg.cn/img_convert/f62cc7b2f719fcf40e2fa259f8caf458.png) ![](https://img-blog.csdnimg.cn/img_convert/7150ff0fb370b96189a89235fc60acde.png) 服务端 Chanel: ![](https://img-blog.csdnimg.cn/img_convert/94d61caedaf9723930ab7d921d06871c.png) 用于某种 Chanel 的读写情况 ![主要负责读事件](https://img-blog.csdnimg.cn/img_convert/19c4ca7f0c21dc8d260f82e78ed621c6.png) ![读字节](https://img-blog.csdnimg.cn/img_convert/564bcf9eebb91811261e26f95ce0c0c6.png) 不同端配置项也不同 ![](https://img-blog.csdnimg.cn/img_convert/fca433ecffe126666c6c87d7c02e3163.png) ## 4 新连接NioEventLoop的分配和selector注册 ![](https://img-blog.csdnimg.cn/img_convert/8ebab8403185fbe8b01f42a2dffedf97.png) ![](https://img-blog.csdnimg.cn/img_convert/818c895c5c606843cdcd6168d0aec113.png) ![](https://img-blog.csdnimg.cn/img_convert/e9f1e4512009ebede62f13250354bbe5.png) ![](https://img-blog.csdnimg.cn/img_convert/70189901966585feca2d92cc2b4f6faf.png) 即为此处调用: ![](https://img-blog.csdnimg.cn/img_convert/c0cb0657f93387482759361b716adc5e.png) ![](https://img-blog.csdnimg.cn/img_convert/251ea3956d755133db160a192873fcf9.png) ![回调之后,最终都会删除自身](https://img-blog.csdnimg.cn/img_convert/3198582c46f03f39a4af2b5d938f873c.png) ![](https://img-blog.csdnimg.cn/img_convert/c2bb950d1c29bc947730884cdd36d587.png) ![](https://img-blog.csdnimg.cn/img_convert/d56b1db94b5c0d378f5ce4dfa54fa0db.png) ![](https://img-blog.csdnimg.cn/img_convert/9318efecc65e71afe8e1e5931a950a55.png) ![](https://img-blog.csdnimg.cn/img_convert/6ef55db083c314f9c85b0a85a96ba06c.png) ![](https://img-blog.csdnimg.cn/img_convert/bcc6359bc6324b076d1bbe549a362c50.png) ![](https://img-blog.csdnimg.cn/img_convert/6e9578f67aaff1e834390534b18090cd.png) ![](https://img-blog.csdnimg.cn/img_convert/60ce2a711341c7e3e3fcbb3bd31e3061.png) ![](https://img-blog.csdnimg.cn/img_convert/7af0a232305a350f425cb0df1ad38e41.png) ![](https://img-blog.csdnimg.cn/img_convert/785b365cde8ca39e50e594e9b58977fb.png) ![](https://img-blog.csdnimg.cn/img_convert/f27d42562be38b57cb31641eca5334a5.png) ![](https://img-blog.csdnimg.cn/img_convert/001c50c9048d9688136ae5bb77103252.png) 回去看看 register 方法 ![](https://img-blog.csdnimg.cn/img_convert/6399381947bd0ff4d94774e2cd6c9c34.png) ![](https://img-blog.csdnimg.cn/img_convert/e41ca6af55e24909535621c6e9fcdda0.png) ![](https://img-blog.csdnimg.cn/img_convert/42602be8e7d1c1b03211e27da772ee51.png) ![](https://img-blog.csdnimg.cn/img_convert/48713d00cdf9a9b4c5a5eafa14424ddb.png) ![](https://img-blog.csdnimg.cn/img_convert/0a9848ee4dd0be532e464aa820596184.png) ![](https://img-blog.csdnimg.cn/img_convert/64cbb4464925c4868b65fc7e80892601.png) ## 5 NioSocketChannel读事件的注册 ![](https://img-blog.csdnimg.cn/img_convert/1c5fee2b86dc179dabb1de9d5307c9ee.png) ![](https://img-blog.csdnimg.cn/img_convert/991d533bb800015825643d946fd488bf.png) ![](https://img-blog.csdnimg.cn/img_convert/30bc08e4ae21595acc8a702eff8cc379.png) ![](https://img-blog.csdnimg.cn/img_convert/1f3122f536922585a4b33bfa3350ed83.png) ![](https://img-blog.csdnimg.cn/img_convert/1f63a6a811789e9c57d2a97bc509de17.png) ![](https://img-blog.csdnimg.cn/img_convert/80819daef2637d9bdc47900e76ceb236.png) ![](https://img-blog.csdnimg.cn/img_convert/4f1a5180d92ede97b160a66316ad2866.png) ![](https://img-blog.csdnimg.cn/img_convert/ec820acb2e90e173006936a2c213a4ce.png) ![](https://img-blog.csdnimg.cn/img_convert/609c52d0c90e7a21eb1b3c8f6dd2ddb4.png) ![](https://img-blog.csdnimg.cn/img_convert/4ea921f43c5333df515587d27c78c1ea.png) ![](https://img-blog.csdnimg.cn/img_convert/657b2e48865b1668ce8d3b204cc7eb59.png) 可以开始接收数据了 ![](https://img-blog.csdnimg.cn/img_convert/ac5082fadbf77657ae537d75938f3cad.png) ![](https://img-blog.csdnimg.cn/img_convert/cb28668114189d6984d2f040dde3f27a.png) 回顾一下创建 ![](https://img-blog.csdnimg.cn/img_convert/e8891d05036c83dc2e79c179dc751595.png) ![](https://img-blog.csdnimg.cn/img_convert/dc6f73ae8d0ec36eae099c23e1854afa.png) ![](https://img-blog.csdnimg.cn/img_convert/273c4aa95cef7ef9eb19a4949e7c48f3.png) ## 6 新连接接入总结 ### Netty是在哪里检测有新连接接入的? - boss线程的第一个过程:轮询Accept事件 - boss线程第二个过程:通过JDK底层的channel的accept方法创建该连接。 ### 新连接是怎样注册到NioEventLoop线程的? 新连接NioEventLoop的分配和selector注册可以回答。boss线程调用chooser的next方法,拿到一个NioEventLoop,然后将这条连接注册到NioEventLoop的selector上面。
目录
相关文章
|
7月前
|
缓存 网络协议 算法
Netty的基础入门(上)
Netty的基础入门(上)
244 1
|
7月前
|
网络协议 Java 测试技术
阿里内部Netty实战小册,值得拥有
Netty 是一个高性能的 Java 网络通信框架,简化了网络编程并涵盖了最新的Web技术。它提供了一种抽象,降低了底层复杂性,使得更多开发者能接触网络编程。Netty 因其易用性、高效性和广泛的应用场景受到推崇,适合互联网行业从业者学习,有助于理解和开发基于Netty的系统。免费的《Netty实战小册》详细介绍了Netty的各个方面,包括概念、架构、编解码器、网络协议和实际案例,帮助读者深入理解和应用Netty。如需完整版小册,可点击链接获取。
阿里内部Netty实战小册,值得拥有
|
1月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
146 0
|
4月前
|
编解码 NoSQL Redis
(十一)Netty实战篇:基于Netty框架打造一款高性能的IM即时通讯程序
关于Netty网络框架的内容,前面已经讲了两个章节,但总归来说难以真正掌握,毕竟只是对其中一个个组件进行讲解,很难让诸位将其串起来形成一条线,所以本章中则会结合实战案例,对Netty进行更深层次的学习与掌握,实战案例也并不难,一个非常朴素的IM聊天程序。
109 3
|
4月前
|
前端开发 网络协议
Netty实战巅峰:从零构建高性能IM即时通讯系统,解锁并发通信新境界
【8月更文挑战第3天】Netty是一款高性能、异步事件驱动的网络框架,适用于开发高并发网络应用,如即时通讯(IM)系统。本文将指导你利用Netty从零构建高性能IM程序,介绍Netty基础及服务器/客户端设计。服务器端使用`ServerBootstrap`启动,客户端通过`Bootstrap`连接服务器。示例展示了简单的服务器启动过程。通过深入学习,可进一步实现用户认证等功能,打造出更完善的IM系统。
194 1
|
4月前
|
移动开发 网络协议 算法
(十)Netty进阶篇:漫谈网络粘包、半包问题、解码器与长连接、心跳机制实战
在前面关于《Netty入门篇》的文章中,咱们已经初步对Netty这个著名的网络框架有了认知,本章的目的则是承接上文,再对Netty中的一些进阶知识进行阐述,毕竟前面的内容中,仅阐述了一些Netty的核心组件,想要真正掌握Netty框架,对于它我们应该具备更为全面的认知。
253 2
|
7月前
|
存储 消息中间件 缓存
Netty的基础入门(下)
Netty的基础入门(下)
132 0
|
7月前
|
前端开发 网络协议 Java
Netty入门指南:从零开始的异步网络通信
Netty入门指南:从零开始的异步网络通信
191 0
|
存储 缓存 NoSQL
跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
本文将要分享的是如何从零实现一套基于Netty框架的分布式高可用IM系统,它将支持长连接网关管理、单聊、群聊、聊天记录查询、离线消息存储、消息推送、心跳、分布式唯一ID、红包、消息同步等功能,并且还支持集群部署。
13531 1
|
7月前
|
消息中间件 Oracle Dubbo
Netty 源码共读(一)如何阅读JDK下sun包的源码
Netty 源码共读(一)如何阅读JDK下sun包的源码
144 1