当前位置:首页 > 科技  > 软件

Netty 编程看上去懵懵的...

来源: 责编: 时间:2024-03-26 17:38:08 255观看
导读前言上篇文章《听说96.5%的程序员都没用过Netty》主要涵盖了 Netty 的入门知识,包括 Netty 的发展历程、核心功能与组件,并且通过实例演示了如何使用 Netty 构建一个 HTTP 服务器。由于 Netty 的抽象程度较高,因此理解起

前言

上篇文章《听说96.5%的程序员都没用过Netty》主要涵盖了 Netty 的入门知识,包括 Netty 的发展历程、核心功能与组件,并且通过实例演示了如何使用 Netty 构建一个 HTTP 服务器。由于 Netty 的抽象程度较高,因此理解起来可能会比较复杂,所以本文通过对比 Java NIO API 和 Netty 的示例代码,并结合Netty源码进行深入剖析,从而更好的理解Netty的工作原理。Qux28资讯网——每日最新资讯28at.com

Java NIO 网络编程流程

首先,我们知道 Netty 是基于 Java NIO API 封装扩展的一个网络编程框架,所以二者的网络编程工作流程是大差不差的。Qux28资讯网——每日最新资讯28at.com

(所以在深入了解Netty之前,建议先对Java NIO有一定的了解)Qux28资讯网——每日最新资讯28at.com

下图是基于Java NIO API进行网络编程时的工作流程。涉及到的Selector、Channel、Buffer这几个组件,《Java NIO是New IO还是Non-blocking IO》中有详细说明。Qux28资讯网——每日最新资讯28at.com

Java NIO 工作原理Java NIO 工作原理Qux28资讯网——每日最新资讯28at.com

Netty 编码 VS  Java NIO API 编码

Netty 同样会用到这些核心组件,只不过再一次抽象封装后,不能直观的看到这些组件。Qux28资讯网——每日最新资讯28at.com

先看下基于Java NIO API编程是怎么编写代码的。Qux28资讯网——每日最新资讯28at.com

Java NIO代码示例Java NIO代码示例Qux28资讯网——每日最新资讯28at.com

可以看到, ServerSocketChannel 注册到 Selector 并监听连接事件,当 Selector 接收到连接的客户端 Channel 后,又监听 Channel 的读写事件,那么下次 Selector 就会接收到客户端的读写事件并进行处理。Qux28资讯网——每日最新资讯28at.com

再看一下基于Netty构建的HTTP服务器示例。Qux28资讯网——每日最新资讯28at.com

Netty 编程Netty 编程Qux28资讯网——每日最新资讯28at.com

能看到的就只有一个对客户端读请求处理的 channelRead0 函数,Selector、ServerSocketChannel这些都没看到。Qux28资讯网——每日最新资讯28at.com

那么 ServerSocketChannel 、Selector 在哪里?事件是什么时候注册的?我们扒开裤子看个究竟。Qux28资讯网——每日最新资讯28at.com

Netty 对 Java NIO API 的封装

接下来,看一下Netty是怎么对Java NIO API进行封装的。Qux28资讯网——每日最新资讯28at.com

ServerSocketChannel 在 Netty 中的体现

关于 ServerSocketChannel 的创建,直接找绑定端口的方法,如下图Qux28资讯网——每日最新资讯28at.com

图片图片Qux28资讯网——每日最新资讯28at.com

在  NioServerSocketChannel 类中可以看到 newChannel() 函数创建了 ServerSocketChannel 。Qux28资讯网——每日最新资讯28at.com

Selector 在 Netty 中的体现

看了上文《听说96.5%的程序员都没用过Netty》,可以知道 EventLoop 负责处理各种事件,所以可以盲猜一下,Selector 应该是在 NioEventLoopGroup 中创建的Qux28资讯网——每日最新资讯28at.com

图片图片Qux28资讯网——每日最新资讯28at.com

果不其然,在 NioEventLoopGroup 的构造方法中调用 JDK 的 SelectorProvider 创建了Selector,也就是 Java NIO 的代码。Qux28资讯网——每日最新资讯28at.com

事件注册在 Netty 中的体现

ServerSocketChannel 在创建后为其分配了一个 EventLoop 并开启新的线程(这也是Netty 多线程异步的体现),最终在 doRegister() 调用了JDK 的接口注册了Selector 并监听了事件,看见 selectionKey 应该什么都清楚了吧。Qux28资讯网——每日最新资讯28at.com

图片图片Qux28资讯网——每日最新资讯28at.com

事件处理在 Netty 中的体现

既然 ServerSocketChannel 注册了Selector 并监听了事件,那接下来就是 EventLoop  对事件的处理了。直接看 NioEventLoop 中的代码,因为他是通过新的线程启动的,所以直接看 run()Qux28资讯网——每日最新资讯28at.com

图片图片Qux28资讯网——每日最新资讯28at.com

processSelectedKeysPlain() 中的代码熟悉吧,Selector 监听到了某个事件进行处理。下面是对读事件的处理Qux28资讯网——每日最新资讯28at.com

图片图片Qux28资讯网——每日最新资讯28at.com

图中 ChannelPipeline 采用了责任链模式,是对事件的处理通道,会对声明时的ChannelPipeline依次执行,也就是图[Netty 编程]中的p.addlast。Qux28资讯网——每日最新资讯28at.com

Netty 网络编程流程

最后,通过一张图梳理下 Netty 的工作流程,并体现和 Java NIO API的关系。Qux28资讯网——每日最新资讯28at.com

图片图片Qux28资讯网——每日最新资讯28at.com

总结

在接触 Netty 的之前一定要先掌握 Java NIO,不然云里雾里的。Qux28资讯网——每日最新资讯28at.com

本文只是介绍了 Java NIO 在 Netty 中的体现、Netty 对 Java NIO 的封装,让大家更方便的理解 Netty,并不涉及 Netty 的高效、强大的设计之处,下文将会对此进行介绍。Qux28资讯网——每日最新资讯28at.com

Qux28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-79445-0.htmlNetty 编程看上去懵懵的...

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 大模型应用的十种架构模式

下一篇: 使用.NET 8 Web API和Entity Framework实现CRUD操作

标签:
  • 热门焦点
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 华为Mate 60系列用上可变灵动岛:正式版体验将会更出色

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top