Netty简述以及应用案例

Netty入门及应用(超详细) Netty是 一个异步事件驱动的网络应用程序框架(NIO框架,Non-Blocking IO,即同步非阻塞式IO),用于快速开发协议服务器和客户端。Netty拥有高性能、 高吞吐量,低延迟,资源消耗少,最小化不必要的内存复制等优点。Netty本身提供了 TCP/UDP 和 HTTP 协议栈,使用方便。二、Netty的重要组件。 阅读详情

1 概述

Netty的官网:https://Netty.io/

Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
在这里插入图片描述
在这里插入图片描述
Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

也就是说,Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。
“快速”和“简单”并不用产生维护性或性能上的问题。Netty 是一个吸收了多种协议(包括FTP、SMTP、HTTP等各种二进制文本协议)的实现经验,并经过相当精心设计的项目。最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。

2 为什么使用Netty

为什么有了NIO之后还要学习和使用Netty呢?

2.1 原生NIO比较复杂,而且有以下问题:

  1. 直接使用 NIO的时候,它的复杂的类库和API让人头大,例如需要咱们熟练掌握NIO的几大核心内容:Selector、 ServerSocketChannel、SocketChannel、ByteBuffer 等。
  2. 要编写出高质量的NIO程序需要熟练掌握多线程和网络编程技术,而这些工作量和难度都不小,例如客户端面临断连重连、网络闪断、半包卖写、失败缓存、网络拥塞和异常流的处理等等。
  3. NIO中有一些Bug:例如Epoll Bug,它会导致Selector 空轮询,最终导致CPU 100%。

NIO中的Bug:
在这里插入图片描述

因为selector的select方法,通常是阻塞的,但是在epoll空轮询的bug中,之前处于连接状态突然被断开,select()的返回值num应该等于0,也就是阻塞状态但是,在此bug中,select()被唤醒,而又没有数据传入,导致while (iterator.hasNext())根本不会执行,而后就进入while (true) 的死循环但
是,正常状态下应该阻塞,也就是只输出一个server:waiting… 而此时进入死循环,不断的输出server:waiting…,程序死循环cpu自然很快飙升到100%状态。

bug产生的原因:
在部分Linux的2.6的kernel中,poll和epoll对于突然中断的连接socket会对返回的eventSet事件集合置为POLLHUP,也可能是POLLERR,eventSet事件集合发生了变化,这就可能导致Selector会被唤醒。
这是与操作系统机制有关系的,JDK虽然仅仅是一个兼容各个操作系统平台的软件,但很遗憾在JDK5和JDK6最初的版本中(严格意义上来将,JDK部分版本都是),这个问题并没有解决,而将这个帽子抛给了操作系统方,这也就是这个bug最终一直到2013年才最终修复的原因(提供的解决方案依然不是最完善的),最终影响力太广。

解决办法:
在Netty 中都有相应的解决方案,最终的终极办法是创建一个新的Selector。

1对Selector的select操作周期进行统计,每完成一次空的select操作进行一次计数,
2若在某个周期内连续发生N次空轮询,则触发了epoll死循环bug。
3重建Selector,判断是否是其他线程发起的重建请求,若不是则将原SocketChannel从旧的Selector上去除注册,重新注册到新的Selector上,并将原来的Selector关闭。

2.2 Netty的优势

设计:更优雅的设计简化了原生NIO中复杂编程
用于各种传输类型的统一API-阻塞和非阻塞Socket
基于一个灵活和可扩展的事件模型,它允许清晰地分离关注点
高度可定制的线程模型-单线程,一个或多个线程池
真正的无连接数据报Socket支持(从3.1开始)
易用性
文档丰富的Javadoc、用户指南和示例
没有其他依赖项,JDK5(Netty3.x)或JDK6(Netty4.x)就足够了
性能
更好的吞吐量,更低的延迟
减少资源消耗
最小化不必要的内存拷贝(零拷贝–操作系统层面)
安全
完整的SSL/TLS和StartTLS支持
社区
社区活跃、不断更新
版本迭代周期短,发现的Bug 可以被及时修复,同时,更多的新功能会被加入。

2.3 Netty的常见使用场景

1)互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。
2)游戏行业:无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用。Netty 作为高性能的基础通信组件,它本身提供了 CP/UDP 和 HTTP 协议栈。非常方便定制和开发私有协议栈,账号登录服务器,地图服务器之间可以方便的通过 Netty 进行高性能的通信。
3)大数据领域:经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨界点通信,它的 Netty Service 基于 Netty 框架二次封装实现。

3 Netty高性能分析

Netty 作为异步事件驱动的网络应用程序框架,高性能之处主要来自于其 I/O 模型和线程处理模型,I/O 模型决定如何收发数据,线程模型决定如何处理数据。

3.1 I/O模型

用什么样的通道将数据发送给对方,I/O 模型在很大程度上决定了框架的性能。
这个咱们之前讲解NIO的时候都给大家做过对比,这里简单复习一下:

3.1.1 阻塞IO

传统阻塞型 I/O(BIO):
在这里插入图片描述

1、每个请求都需要独立的线程完成数据的读写和业务处理;
2、当客户端请求并发数较大时,需要创建大量线程来处理连接,系统资源占用较大;
3、建立连接后,如果当前线程暂时没有数据可读,则线程就会阻塞在读取数据的操作上,造成线程资源浪费;

3.1.2 IO复用模型

在 I/O 复用模型中,会用到 Select,这个函数也会使进程阻塞,但是和阻塞 I/O 所不同的是这两个函数可以同时阻塞多个 I/O 操作,而且可以同时对多个读操作,多个写操作的 I/O 函数进行检测,直到有数据可读或可写时,才真正调用 I/O 操作函数。
Netty 的非阻塞 I/O 的实现关键是基于 I/O 复用模型,这里用 Selector 对象表示:
在这里插入图片描述

1、当线程从一个客户端SocketChannel进行读写数据时,若没有数据可用时,该线程可以进行其他任务。
2、线程通常将非阻塞IO的空闲时间用于在其他通道上执行IO操作,所以单独的线程可以管理多个输入和输出通道。
3、由于读写操作都是非阻塞的,这就可以充分提升IO线程的运行效率,避免由于频繁I/O阻塞导致的线程挂起。
4、一个 I/O 线程可以并发处理N个客户端连接和读写操作,这从根本上解决了传统同步阻塞I/O一连接一线程模型,架构的性能、弹性伸缩能力和可靠性都得到了极大的提升。

传统的IO是面向字节流或字符流的,以流式的方式顺序地从一个Stream中读取一个或多个字节, 因此也就不能随意改变读取指针的位置。
在NIO中,抛弃了传统的IO流,而是引入了Channel和Buffer的概念。在NIO中,只能从Channel中读取数据到Buffer中或将数据从Buffer中写入到 Channel。
基于Buffer操作不像传统IO的顺序操作,NIO中可以随意地读取任意位置的数据。

3.2 线程模型

上面介绍了服务器如何基于I/O 模型管理连接并获取输入数据,接着介绍一下决定服务器如何处理数据的线程模型。

3.2.1 线程模型1:传统阻塞 I/O 服务模型

在这里插入图片描述
特点:
采用阻塞式 I/O 模型获取输入数据;
每个连接都需要独立的线程完成数据输入,业务处理,数据返回的完整操作。
存在问题:
当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大;
连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在 读取数据(read)操作上,造成线程资源浪费。

3.2.2 线程模型2:Reactor 模式

针对传统阻塞 I/O 服务模型的 2 个缺点,比较常见的有如下解决方案:
基于 I/O 复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象上等待,无需阻塞等待所有连接。当某条连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理;
基于线程池复用线程资源:不必再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务。
而 Reactor 模式基本设计思想就是I/O 复用结合线程池:
在这里插入图片描述
Reactor 模式,是指通过一个或多个输入同时传递给服务处理器的服务请求的事件驱动处理模式。
服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor 模式也叫Dispatcher 模式。
即 I/O 多了复用统一监听事件,收到事件后分发(Dispatch 给某进程),是编写高性能网络服务器的必备技术之一。
Reactor 模式中有 2 个关键组成:
Reactor:Reactor 在一个单独的线程中运行,负责监听和分发事件,分发给适当的处理程序来对IO 事件做出反应。 它就像公司的电话接线员,它接听来自客户的电话并将线路转移到适当的联系人;
Handlers:处理程序执行 I/O 事件要完成的实际事件,类似于客户想要与之交谈的公司中的实际负责人。Reactor 通过调度适当的处理程序来响应 I/O 事件,处理程序执行非阻塞操作。

根据 Reactor 的数量和Handler的数量不同,有 3 种典型的实现:
1)单 Reactor 单线程;
2)多线程Reactor;
3)主从 Reactor 多线程。
可以这样理解,Reactor 就是一个执行 while (true) { selector.select(); …} 循环的线程,会源源不断的产生新的事件,称作反应堆很贴切。

3.2.2.1单线程Reactor

在这里插入图片描述
其中Select 是前面IO复用模型介绍的标准网络编程 API,可以实现应用程序通过一个阻塞对象监听多路连接请求。
说明:
1)Reactor 对象通过 Select 监控客户端请求事件,收到事件后通过 Dispatch 进行分发;
2)如果是建立连接请求事件,则由 Acceptor 通过 Accept 处理连接请求,然后创建一个 Handler对象处理连接完成后的后续业务处理;
3)如果不是建立连接事件,则 Reactor 会分发调用连接对应的 Handler 来响应;
4)Handler 会完成 Read→业务处理→Send 的完整业务流程。

优点模型简单,没有多线程、进程通信、竞争的问题,全部都在一个线程中完成。
缺点性能问题,只有一个线程,无法完全发挥多核 CPU 的性能。Handler 在处理某个连接上的业务时,整个进程无法处理其他连接事件,很容易导致性能瓶颈。 当其中某个 handler 阻塞时, 会导致其他所有的 client 的 handler 都得不到执行, 并且更严重的是, handler 的阻塞也会导致整个服务不能接收新的 client 请求(因为 acceptor 也被阻塞了)。 因为有这么多的缺陷, 因此单线程Reactor 模型用的比较少。
使用场景:客户端的数量有限,业务处理非常快速,比如 Redis。

3.2.2.2 多线程Reactor

在这里插入图片描述
说明:
1)Reactor 对象通过 Select 监控客户端请求事件,收到事件后通过 Dispatch 进行分发;
2)如果是建立连接请求事件,则由 Acceptor 通过 Accept 处理连接请求,然后创建一个 Handler对象处理连接完成后续的各种事件;
3)如果不是建立连接事件,则 Reactor 会分发调用连接对应的 Handler 来响应;
4)Handler 只负责响应事件,不做具体业务处理,通过 Read 读取数据后,会分发给后面的Worker 线程池进行业务处理;
5)Worker 线程池会分配独立的线程完成真正的业务处理,如何将响应结果发给 Handler 进行处理;
6)Handler 收到响应结果后通过 Send 将响应结果返回给 Client。

优点:可以充分利用多核 CPU 的处理能力。
缺点:多线程数据共享和访问比较复杂;Reactor 承担所有事件的监听和响应,在单线程中运行,高并发场景下容易成为性能瓶颈。

3.2.2.3主从多线程Reactor

在这里插入图片描述
针对多线程Reactor模型中,Reactor 在单线程中运行,高并发场景下容易成为性能瓶颈,可以让Reactor 在多线程中运行。
方案说明:
1)Reactor 主线程 MainReactor 对象通过 Select 监控建立连接事件,收到事件后通过 Acceptor接收,处理建立连接事件;
2)Acceptor 处理建立连接事件后,MainReactor 将连接分配 Reactor 子线程给 SubReactor 进行处理;
3)SubReactor 将连接加入连接队列进行监听,并创建一个 Handler 用于处理各种连接事件;
4)当有新的事件发生时,SubReactor 会调用连接对应的 Handler 进行响应;
5)Handler 通过 Read 读取数据后,会分发给后面的 Worker 线程池进行业务处理;
6)Worker 线程池会分配独立的线程完成真正的业务处理,如何将响应结果发给 Handler 进行处理;
7)Handler 收到响应结果后通过 Send 将响应结果返回给 Client。
优点:父线程与子线程的数据交互简单职责明确,父线程只需要接收新连接,子线程完成后续的业务处理。
父线程与子线程的数据交互简单,Reactor 主线程只需要把新连接传给子线程,子线程无需返回数据。
这种模型在许多项目中广泛使用,包括 Nginx 主从 Reactor 多进程模型,Memcached 主从多线程,Netty 主从多线程模型的支持。

3.2.2.4 总结

3 种模式可以对比生活中案例来理解:(餐厅常常雇佣一个漂亮的小姐姐作为接待员负责迎接顾客,当
顾客入坐后,来一个帅气的小哥哥作为侍应生专门为这张桌子服务)
1)单 Reactor 单线程,接待员和侍应生是同一个人,全程为顾客服务;
2)多线程Reactor,1 个接待员小姐姐,多个侍应生小哥哥,接待员只负责接待;
3)主从 Reactor 多线程,多个接待员小姐姐,多个侍应生小哥哥。

Reactor 模式具有如下的优点:
1)响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的;
2)编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销;
3)可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源;
4)可复用性,Reactor 模型本身与具体事件处理逻辑无关,具有很高的复用性。

Netty 详细讲解,附服务端,客户端代码例子 的作用是管理事件循环组,它们负责处理不同类型的事件,如接受传入连接、读取/写入数据等。在这里,我们创建了两个bossGroup和。bossGroup用于接受传入的连接请求,而则用于实际处理连接的流量。是 Netty 用于启动服务器的帮助类。通过group()方法将两个绑定到服务器上。channel()方法指定了服务器使用的通道类型。在这里,我们选择了,这意味着我们将使用基于 NIO 的 Socket 通道。方法设置了一个,当一个新的连接被接受时,这个初始化器将会被调用。 阅读详情

相关推荐

Netty框架入门篇 - 初识Netty及第一款Netty应用程序

文章目录初识NettyNetty简介为什么用NettyNetty特性总结异步和事件驱动Netty核心组件简介Channel事件和ChannelHandlerChannelFutureEventLoop、EventLoopGroup总结 初识Netty Netty简介 Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。在网络编程领域,Netty是Java的卓越框架,它驾驭了Java高级API的能力,并将其隐藏在一个易于使用的API之后,通过Netty

wzljiayou的博客 3705

Netty官网首页(翻译)

官网:https://netty.io/ Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。 Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。 它极大地简化并简化了TCP和UDP套接字服务器等网络编程。 “快速简便”并不意味着最终的应用程序会受到可维护性或性能问题的影响。 Netty经过精心设计,具有丰富...

weixin_30254435的博客 3854

netty官网学习手册中文版

netty-3.1官网学习手册,中文版

Netty入门使用

Netty入门使用

Charge8的博客 1305

TCN+iTransformer时间序列预测实战:从风电功率预测到源码解析(附完整代码)

本文深入探讨了TCN与iTransformer融合模型在时间序列预测,特别是风电功率预测中的应用。通过解析iTransformer‘倒置’视角的创新架构与TCN强大的局部时序捕捉能力,文章提供了完整的融合方案设计、源码实现及实战调优经验,旨在构建更强大的下一代预测引擎。

weixin_29062671的博客 265

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络

网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应

cdyunaq的博客 1306

netty应用(一)--netty入门及组件

Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。注意:这里的异步不要和异步IO混淆,这里的异步指Netty使用多线程来完成结果传送,让发送请求的线程不阻塞。优点Nio开发工作量大,bug多需要自己构建协议netty解决 TCP 传输问题,如粘包、半包nio中在liunx系统中epoll 空轮询导致 CPU 100%

南猫信巷 1249

Zabbix监控联想服务器XCC的SNMPv3配置实战

本文详细介绍了如何通过SNMPv3协议配置Zabbix监控联想服务器XCC的实战方法。文章从安全角度阐述了选择SNMPv3的必要性,并分步讲解了在XCC中启用SNMPv3、创建认证用户,以及在Zabbix中导入专用模板、创建主机并关联模板的完整流程,帮助运维人员实现对服务器硬件健康状态的自动化、安全监控。

weixin_29210727的博客 464

Netty应用(五) 之 Netty引入 & EventLoop

Netty应用(五) 之 Netty引入 & EventLoop

Eriksen的博客 1776

Chronos:学习时间序列的大语言模型(论文解读)

《Chronos:学习时间序列的大语言模型》论文翻译

qq_20144897的博客 9049

Ubuntu22.04下安装LDAP

在Ubuntu22.04的时候可以使用apt的方式来安装,在安装LDAP的web 服务器的时候可以考虑选择 LDAP 帐户管理器 (LAM)。因为 PHPLDAPadmin 安装时需要 php 的环境依赖,相对来说安装麻烦。此外在 PHPLDAPadmin 中创建组织和用户时与平常的语法有很大不同,对新手来说不友好。

dl_11的博客 3944

java 项目中应用netty

Java项目中应用Netty 在现代的网络应用中,高性能、高并发处理是至关重要的,而Netty作为一个异步事件驱动的网络应用框架,能够帮助开发者轻松构建高性能、高可靠性的网络应用程序。本文将介绍在Java项目中如何应用Netty,并提供一些代码示例供读者参考。 Netty介绍 Netty是一个基于Java NIO的异步事件...

weixin_41221786的博客 278

手把手教你学Simulink--Simulink智能驾驶场景挑战:高速公路入口匝道汇入仿真

高速公路入口匝道汇入在智能驾驶中的作用是当车辆从入口匝道进入主干道时,系统能够自主决策并执行汇入操作,确保安全和高效。目标识别与跟踪:如检测前方障碍物、识别车道线。路径规划:如计算最优汇入路径。动态控制:如调整速度、转向等以完成汇入动作。本示例将展示如何使用Simulink构建一个用于智能车辆高速公路入口匝道汇入的仿真模型,并进行验证。通过本指南,我们介绍了如何基于Simulink搭建一个用于智能车辆高速公路入口匝道汇入的仿真模型,并进行仿真和性能评估。背景介绍。

MHD0815的博客 261

通信框架Netty的详细介绍及应用

对于Netty的十一个疑问 【说明】本文原载于码农 IO(manong.io)官方微信 developerWorks,转载、引用请注明出处及作者。 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。 2.使用 Netty 能够做什么? 开发异...

weweeeeeeee的博客 2290

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58= GetFlowDropDown SQL注入

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58=、eHR/OA一体化智慧云平台、智慧一卡通云平台、行业软件开发与定制、智慧企业管理信息化咨询与项目服务为核心业务的顾问式管理咨询和软件个性定制开发的高科技股份集团公司。同鑫T9eHR信息华管理系统存在SQL注入漏洞,攻击者可通过该漏洞上传shell。关闭互联网暴露面或接口设置访问权限。利用sqlmap进行shell。

iSee857的博客 698

【C++项目】从零实现RPC框架「三」:项⽬抽象层实现

本文详细介绍了如何从零实现一个 C++ RPC(远程过程调用)框架,包括通信抽象、消息抽象、通信实现、以及消息分发器的实现。通过系统化的代码示例,展示了如何构建一个高效、灵活且可扩展的 RPC 框架。

You build it, you run it 2162

netty入门介绍及应用实例

Netty介绍及使用 1. Netty介绍 1.1 简介 Netty是由JBOSS提供的一个java开源框架,现为Github上的独立项目。Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠的网络IO程序。Netty主要针对在TCP协议下,面向Clients端的高并发应用,或Peer-to-Peer场景下的大量数据持续传输的应用。Netty本质是NIO框架,适用于服务器通讯相关的多种应用场景。 要透彻理解Netty,先学习NIO java NIO介绍及入门案例 NIO的类库和AP

懵齐的博客 1552

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Netty框架学习及第一个Netty应用

1.什么是Netty?     Netty是一个利用Java的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的API的客户端/服务器框架。Netty提供高性能和可扩展性,让你可以自由地专注于你真正感兴趣的东西。 2.发展历史:     网络发展初期,花费很多时间学习socket的复杂、寻址等,在C socket库上进行编码,并需要在不同的操作系统上做不同的处理。     Java早期...

IT咸鱼圈 1542

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Netty在实战中的应用

Netty是高性能异步事件驱动的NIO框架,支持TCP/UDP协议,通过优化epoll空轮询等机制简化NIO开发。其核心特性包括Reactor线程模型实现高并发、零拷贝提升传输效率、内置心跳与重连机制保障可靠性、内存池降低GC频率,并提供多种解码器解决粘包拆包问题。广泛应用于游戏服务器与分布式通信中,实际项目中可用于构建高可靠数据转发服务,支持通道预加载、自动重连和消息补偿机制,灵活应对复杂协议。

Acho_0的博客 898

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Netty学习(一)- Netty入门与Netty应用实战

一、什么是Netty Netty官网上是这样定义Netty的: Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. 用人话(Google翻...

noaman_wgs的博客 2318

Netty应用

Netty是什么?为什么要用Netty? Netty是由JBOSS提供的一个java开源框架。 Netty提供异步的、事件驱动的网络应用程序框架和工具, 用以快速开发高性能、高可靠性的网络服务器和客户端程序。 互联网公司必备 http://netty.io/wiki/adopters.html 为什么要用Netty 1、虽然JAVA NIO框架提供了 多路复用IO的支...

weixin_30244889的博客 203

Netty的简单应用

Netty客户端 package com.example.demo.netty; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGro...

qq_20004115的博客 219

【Netty】第一个Netty应用

目录 一、前言 二、Netty应用   2.1 服务端客户端框架图   2.2 服务端   1. 引导服务端   2. 实现服务端逻辑   2.3 客户端   1. 引导客户端   2. 实现客户端逻辑   2.4 运行   1. pom.xml文件   2. 运行服务端   3. 运行客户端 三、总结 一、前言   前面已经学习完了Java NIO的内容,接着来学...

凡是过往,皆为序章 221

Netty案例(五)之应用层心跳检测

文章目录netty版本心跳检测 netty版本 netty版本:io.netty:netty-all:4.1.33.Final 心跳检测 心跳:即在TCP长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保TCP连接的有效性。 为什么需要心跳? 因为网络的不可靠性, 有可能在TCP保持长连接的过程中, 由于某些突发情况, 例如网线被拔出, 突然掉电...

jannal专栏 622

Netty学习路线图 - 第四阶段:Netty基础应用

本文是Netty学习系列的第四部分,通过实践案例讲解Netty基础应用。文章首先介绍如何搭建简单的Echo服务器和客户端,展示Netty的基本使用方式,包括创建处理器、配置线程池和启动服务。随后进阶实现HTTP服务器,利用Netty内置的HTTP编解码器简化开发。文章还计划涵盖WebSocket聊天室、自定义协议设计和编解码器应用等内容。通过从简单到复杂的案例演示,帮助读者掌握Netty的核心功能,为后续高级应用打下基础。

doke99的博客 955
上一篇: idea 2020,2021,2022石皮-解到2099年怎么搞
下一篇: 看完这一篇还不了解Cookie、Session、Token、JWT吗
凌晨里的无聊人
博客等级 码龄8年 2320粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值