您的位置 首页 java

JAVA互联网架构-Netty通信框架

概述

netty 和Mina是 JAVA 世界非常知名的通讯框架。它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在 Jboss 名下,后来出来自立门户netty.io。我正好最近也要做一些网络方面的开发,就研究一下Netty的源码,顺便分享出来了。 Netty目前有两个分支:4.x和3.x。4.0分支重写了很多东西,并对项目进行了分包,规模比较庞大,入手会困难一些,而3.x版本则已经被广泛使用。

Netty是什么

Netty底层基于jdk的N IO ,我们为什么不直接基于jdk的nio或者其他nio框架?下面是我总结出来的原因

1.使用jdk自带的nio需要了解太多的概念,编程复杂

2.netty底层IO模型随意切换,而这一切只需要做微小的改动

3.netty自带的拆包解包,异常检测等机制让你从nio的繁重细节中脱离出来,让你只需要关心业务逻辑

4.netty解决了jdk的很多包括空轮训在内的bug

5.netty底层对 线程 ,selector做了很多细小的优化,精心设计的reactor线程做到非常高效的并发处理

6.自带各种 协议栈 让你处理任何一种通用协议都几乎不用亲自动手

7.netty社区活跃,遇到问题随时邮件列表或者issue

8.netty已经历各大 rpc 框架,消息中间件, 分布式 通信中间件线上的广泛验证,健壮性无比强大

Netty是一个异步的、 事件驱动 的网络应用框架,可以快速开发高性能的网络协议

下图是来自netty home的官方图:

下面进入主题,我们先大概了解一下Netty和NIO:

  1. Channel (NIO): 字面理解为“通道”,用于完成一个I/O请求,也可以理解为通信的载体。

  2. Selector(NIO): 选择器,也可被称为多路复用器,是实现非阻塞IO的关键。它类似于一个监听器,通过地调用select()或selectNow()可以得到目前有多少channel处于I/O就绪状态,通过调用selectedKeys()得到就绪状态的SelectionKey的集合,然后遍历这一集合便可得到所有就绪状态的SelectableChannel,进一步便可以做相应的操作。

  3. Buffer(NIO): 缓冲区,在NIO中数据的读写都是面向buffer的,可以理解为内存里开辟的一块临时保存数据的区域,而本质上就是一个数组,然后基于position、limit、capacity、address来操作这个数组。在netty中衍生出ChannelBuffer。

  4. ChannelHandler(Netty): ChannelHandler负责与I/O无关的业务逻辑处理。可以处理或拦截ChannelInboundInvoker或ChannelOutboundInvoker操作,分别用于处理上行和下行的消息,并将其转发到ChannelPipeline中交给下一个ChannelHandler。

  5. ChannelEvent(Netty) :Netty是基于事件驱动的,ChannelEvent是事件(数据或者状态改变)载体,例如传输的数据对应MessageEvent,状态的改变对应ChannelStateEvent。当对Channel进行操作时,会产生一个ChannelEvent,并发送到ChannelPipeline。ChannelPipeline会选择一个ChannelHandler进行处理。这个ChannelHandler处理之后,可能会产生新的ChannelEvent,并流转到下一个ChannelHandler。

  6. ChannelPipeline(Netty) :Pipeline的中文含义是“管道”,传输途径。也就是说在ChannelPipeline控制ChannelEvent事件分发和传递,流转到ChannelHandler中进行处理。ChannelPipeline包含两条线路:Upstream和Downstream,分别对应上行和下行的通信。

  7. ChannelFuture(Netty) :在Netty中所有的I/O操作都是异步的,因此我们总是得不到最终实际的I/O结果,而是得到ChannelFuture,它会包含一些I/O执行状态的结果。ChannelFuture往往配合监听器使用,在其中注册一个监听器,当操作执行成功或失败时监听会自动触发,相当于一个回调。

  8. EventLoop(Netty) Netty中的线程池模型

总结

以上是对Netty通信框架总结,分享给大家,希望大家可以了解什么是Netty通信框架。觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持。(吹一波,233~~)

文章来源:智云一二三科技

文章标题:JAVA互联网架构-Netty通信框架

文章地址:https://www.zhihuclub.com/200940.shtml

关于作者: 智云科技

热门文章

网站地图