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

Netty:我为啥这么受欢迎你们不知道吗?

来源: 责编: 时间:2024-03-27 17:39:17 114观看
导读前言上文《Netty 编程看上去懵懵的...》通过比较 Java NIO 和 Netty 的工作流程,并结合 Netty 的源码,可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功能的设计原理,学习 Netty 是如何实现其卓越的

前言

上文《Netty 编程看上去懵懵的...》通过比较 Java NIO 和 Netty 的工作流程,并结合 Netty 的源码,可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功能的设计原理,学习 Netty 是如何实现其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的设计思想。qVW28资讯网——每日最新资讯28at.com

Netty 解决的问题

我们先看看使用 Netty 在网络编程中帮助我们解决了什么问题。qVW28资讯网——每日最新资讯28at.com

简化网络编程

首先,基于 Netty 初次编码的直观体验来讲,开发者不用手动处理网络通信细节,包括线程管理、I/O 处理、协议解析等,可以专注于业务逻辑的实现。也正是因为如此,在学习 Netty 时比较抽象难懂 。qVW28资讯网——每日最新资讯28at.com

如下图,可以看到 Java NIO 的代码大概有 80 行,而且还没有实现 HTTP 协议,并且还是单线程,没有复杂的线程管理,更不用说性能什么的。qVW28资讯网——每日最新资讯28at.com

而 Netty 实现的代码只有 30 多行,其中的差别一目了然。qVW28资讯网——每日最新资讯28at.com

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

粘包和拆包

我们一般说粘包和拆包都是说 TCP 协议的问题,因为当用户消息通过 UDP 协议传输时,操作系统不会对消息进行拆分,所以发送出去的一条 UDP 报文就是完整的用户消息,也就是每个 UDP 报文就是用户消息的边界。qVW28资讯网——每日最新资讯28at.com

而当用户消息通过 TCP 协议传输时,消息可能会被操作系统分组成多个的 TCP 报文进行传输,这个时候接收方收到多个报文后,由于不知道消息的边界,也就无法读出一个完整的消息。qVW28资讯网——每日最新资讯28at.com

举个例子,当发送方准备发送 「Hi」和「I am Erdan」这两个消息,由于MTU限制、缓冲区的大小等条件,可能会出现几种情况:qVW28资讯网——每日最新资讯28at.com

第一种情况,两条消息分到一个报文中,像这样:qVW28资讯网——每日最新资讯28at.com

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

第二种情况,「I am Erdan」中的部分消息随「Hi」被分到一个报文中,像这样:qVW28资讯网——每日最新资讯28at.com

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

还可能会有第三、四...种情况。qVW28资讯网——每日最新资讯28at.com

当接收方接收到第一种情况时我们称之为粘包,第二种情况称之为拆包。qVW28资讯网——每日最新资讯28at.com

上面的种种情况表明,一个用户消息不能对应一个 TCP 报文,正因为这样,所以 TCP 是面向字节流的协议。qVW28资讯网——每日最新资讯28at.com

粘包和拆包解决手段

解决粘包和拆包的根本手段就是找出消息的边界,有几种方式:qVW28资讯网——每日最新资讯28at.com

  • 固定消息长度,这种方式灵活性不高,实际中很少用。
  • 特殊字符作为边界,HTTP 是一个非常好的例子,通过设置回车符、换行符作为 HTTP 报文协议的边界。
  • 自定义消息结构:消息头消息体,可以自定义一个消息结构,由包头和数据组成,其中包头包是固定大小的,而且包头里有一个字段来说明紧随其后的数据有多大。

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

HTTP格式qVW28资讯网——每日最新资讯28at.com

Netty的编解码器

Netty 提供了固定长度解码器(FixedLengthFrameDecoder)、行分隔符解码器(LineBasedFrameDecoder)、分隔符解码器(DelimiterBasedFrameDecoder)、基于长度字段的解码器(LengthFieldBasedFrameDecoder)几种方式来解决粘包问题,可以结合 Netty 的 ChannelPipeline 来使用。qVW28资讯网——每日最新资讯28at.com

除此之外 Netty 也提供了 HTTP、WebSocket、TCP、UDP几种协议的编解码器,这也是 Netty 灵活扩展强大之处。qVW28资讯网——每日最新资讯28at.com

高性能的设计

Netty 除了帮助开发人员解决了一些问题,还提高了网络编程性能,体现如下qVW28资讯网——每日最新资讯28at.com

多线程调度

在网络编程中如果使用单线程来处理,即便是IO多路复用,吞吐和性能也是会有局限的。qVW28资讯网——每日最新资讯28at.com

而 Netty 中通过 EventLoopGroup 管理线程池,每个线程就是一个 EventLoop。EventLoop 内部有一个 Selector 负责处理一个或多个 Channel 的注册、读写和其他事件。qVW28资讯网——每日最新资讯28at.com

所以 Netty 通过 EventLoopGroup、EventLoop 和 Selector 的配合工作,实现了高效的并发处理能力。qVW28资讯网——每日最新资讯28at.com

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

线程安全保障

既然是多线程处理,肯定要去考虑线程安全以确保程序的正确性。qVW28资讯网——每日最新资讯28at.com

Netty 是如何保障线程安全的?qVW28资讯网——每日最新资讯28at.com

Netty 通过使用管道(ChannelPipeline)和处理器(ChannelHandler)的方式来实现数据的处理和流转。而 ChannelHandler 会被分配给一个 EventLoop 处理, EventLoop 内部的数据结构和状态都是线程封闭的,不会被其他线程访问或修改。qVW28资讯网——每日最新资讯28at.com

所以 Netty 通过合理地设计组件之间的关系,通过单线程执行、无锁设计等方式保证了在高并发情况下的线程安全性。qVW28资讯网——每日最新资讯28at.com

零拷贝

在传统的网络编程中,数据在进行网络传输之前需要从应用层缓冲区复制到操作系统内核的缓冲区,然后再从内核的缓冲区复制到网络设备的缓冲区。这种复制操作会增加 CPU 的负载和内存的开销,如下图qVW28资讯网——每日最新资讯28at.com

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

而 Netty 利用零拷贝技术来减少数据复制的次数,提高了数据传输的效率。qVW28资讯网——每日最新资讯28at.com

零拷贝将数据从内核空间直接传输到网络适配器,避免了数据在内核空间和用户空间之间的复制,从而减少了CPU的负担。如下图qVW28资讯网——每日最新资讯28at.com

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

Netty的零拷贝体现在以下几个方面:qVW28资讯网——每日最新资讯28at.com

  • 零拷贝文件传输:Netty 的 FileRegion 接口提供了直接在文件系统和网络之间传输数据的功能。通过使用零拷贝技术,数据可以直接从磁盘读取并发送到网络设备,避免了中间的缓冲区拷贝,提高了文件传输的性能。
  • 零拷贝内存传输:Netty 的 ByteBuf 类型支持零拷贝的内存传输。当数据在应用程序和内核之间传输时,Netty 使用直接内存缓冲区(Direct ByteBuffer)来避免额外的数据拷贝操作,提高了内存传输的效率。

通过以上方式,Netty 实现了零拷贝技术在网络编程中的应用,提高了数据传输的效率和性能。这使得 Netty 在处理大量数据传输和高并发场景下具有更好的性能表现。qVW28资讯网——每日最新资讯28at.com

总结

总的来说,Netty 不论在功能、性能以及稳定性来讲都是一款很nice的网络编程框架,很多知名的项目都将 Netty 作为其网络通信的底层框架,比如Apache Kafka、Elasticsearch、gRPC、Dubbo等。熟悉这些框架的开发者通常都具备高并发开发经验,并且掌握 Netty 是理解这些框架的重要基础之一。qVW28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-79838-0.htmlNetty:我为啥这么受欢迎你们不知道吗?

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

上一篇: 野心、梦想与科幻——浅谈外星殖民与软件工程

下一篇: 如何使用Node.js和Web 3.0构建去中心化应用程序

标签:
  • 热门焦点
  • 石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    科技圈经常能看到一个词叫“缝合怪”,用来形容那些把好多功能或者外观结合在一起的产品,通常这样的词是贬义词,但如果真的是产品缝合的好、缝合的实用的话,那它就成了中性词,今
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • Golang 中的 io 包详解:组合接口

    Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 如何正确使用:Has和:Nth-Last-Child

    如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 当家的盒马,加速谋生

    当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
  • 利用职权私自解除被封帐号 Meta开除20多名员工

    利用职权私自解除被封帐号 Meta开除20多名员工

    11月18日消息,据外媒援引知情人士表示,过去一年时间内,Facebook母公司Meta解雇或处罚了20多名员工以及合同工,指控这些人通过内部系统以不当方式重置用户帐号,其
Top