Netty初窥宏观理解

作者: 爱学习的蹭蹭 | 来源:发表于2019-05-12 15:48 被阅读7次

一、基本简要

  • 1、Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。 它极大地简化并简化了TCP和UDP套接字服务器等网络编程。

  • 2、“快速简便”并不意味着最终的应用程序会受到可维护性或性能问题的影响。 Netty经过精心设计(资源优雅关闭,在事件驱动模型使用观察者模式,Reactor模型),具有丰富的协议,如FTP,SMTP,HTTP以及各种二进制和基于文本的传统协议。 因此,Netty成功地找到了一种在不妥协的情况下实现易于开发,性能,稳定性和灵活性的方法。

  • 3、Netty是一个异步和事件网络应用框架,在很多场景下解决高可用,高性能的协助开发

Netty知识体系大纲
  • 4、Netty的核心:可扩展事件模型,统一通信API,零拷贝的Byte Buffer
  • 5、RTSP:实时流协议Real Time Streaming Protocol,在音频和流媒体视频方面软件开发推荐使用

二、特征

2.1 设计

  • 1、适用于各种传输类型的统一API - 阻塞和非阻塞套接字
  • 2、基于灵活且可扩展的事件模型,可以清晰地实现分离关注点(大分成小部分进行处理)
  • 3、高度可定制的线程模型 - 单线程,一个或多个线程池,如SEDA(Staged Event Driven Architecture)阶段时间驱动应用框架
  • 4、真正的无连接数据报套接字支持(自3.1起)

2.2 便于使用

  • 详细记录的Javadoc,用户指南和示例没有其他依赖项,JDK 5(Netty 3.x)或6(Netty 4.x)就足够了注意:某些组件(如HTTP / 2)可能有更多要求。 有关更多信息,请参阅“要求”页面。

2.3 性能

  • 1) 更高的吞吐量,更低的延迟
  • 2) 减少资源消耗(shutdownGracefully)
  • 3) 最小化不必要的内存复制(零拷贝)

2.4 安全

  • 完整的SSL / TLS和StartTLS支持

2.5 社区活跃

  • 1、收到社区反馈问题,及时修复与发布

三、异步asynchronized和同步synchronized

  • 举个例子:普通B/S模式(同步)AJAX技术(异步)
  • 同步:提交请求->等待服务器处理->处理完返回 这个期间客户端浏览器不能干任何事
  • 异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
  • 可见,彼“同步”非此“同步”——我们说的java中的那个共享数据同步(synchronized)
    一个同步的对象是指行为(动作),一个是同步的对象是指物质(共享数据)。

此外:异步实现原理比同步复杂,原因,异步要控制不同程序底层的线程处理

比较官方概念

  • 异步:是指主动请求数据后便可以继续处理其他任,随后等待I/O操作完毕的通知,这可以使紧凑在数据读与写是也不阻塞
  • 同步:是指主动请求等等I/O操作完毕的方式,当数据就绪后在读与写的时候必须阻塞

四、为什么废弃Netty5

  • Netty5主要是采用了FokJoinPool,它本身比较复杂,从而添加了Netty的复杂性,从某种程度上性能得不到很明显的改良. Netty开发者给出来的答案
  • 部分内部方法和类的实现都发生了改变,如 channelRead0方法在Netty5.0 重命名了messageReceived方法

五、Netty的压缩与解压

  • Netty的压缩与解压,并不是对文件进行的压缩和解压,是对传输过程中进行压缩与解压

六、语言和平台中立

  • 语言和平台中路,在不同环境可以用不同语言进行实现的功能提供对方使用,双方不关注实现的过程。如:thrift的IDL(InterFace Description Language)实现客户端或服务端进行提供其他语言进行调用。

七、RMI和RPC

  • RMI : Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。如:EJB就是一种很典型的RMI
  • PRC: Remote Procedure Call,RPC的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用
  • RPC有两种调用方式:异步和同步调用
  • Netty实现RPC是与Google Protobuf或gRPC 一起集合使用,Thrift可以单独使用

八、Netty对WebSocket的支援

  • Websocket 主要的特征服务端和客户端进行建立长连接,在客户端和服务器一旦建立会基于http之上转换成socket,连接之后会是全双供通信服务端与客户端是等价的,客户端随时可以服务器发送数据,服务端也可以向客户端发送数据,然而websocket适合做即时通信聊天
  • websocket的出现弥补http1.0协议没办法做到的事情,同时实现H5的一部分支持
  • WebSocket只传数据,本身没有http协议太多的头属性

注意点:服务端如果向客户端发生数据包时反复发生,假设通过多次进行处理,客户端还没数据响应,此时服务端就认为客户端是断开,服务端会重新建立新的Socket,在WebSocket中是极为常见的问题

九 Netty的心跳检测支持

  • 心跳检测其实是用定时器扫描实现(如:Sigar检测心跳环境配置)
  • IdleStateHandlerk空间状态处理器,在*一定时间指定也没有读与写,此时会触发该处理器
  • ping 与 pong 发送心跳

十、推荐使用Gradle

  • Gradle是比Maven更加灵活的配置,它是有Groovy语言方式进行开发的一款管理代码工程工具

十一、为什么说Netty的shutdownGracefully关闭是优雅(重点与面试可能会问到)

  • 如果有连接还没处理完就尝试把连接池在一定时间内进行处理,那么超时之后再把连接池直接kill(杀掉),如果没有可空可允许的时间内会把连接正常的时间内处理掉,并且同时不会接收新的别的请求,这就是Netty的优雅关闭

十二、其他优秀高并发框架(不作掌握点)

  • Scala 的Actor实现并发编程,同样基于收件模型并机制
  • Akka是JAVA虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时

十三、Netty 官方

https://netty.io/

相关文章

  • Netty初窥宏观理解

    一、基本简要 1、Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。 它...

  • netty初窥(摘自netty-4-user-guide)

    netty4.1初窥 Netty 是一个提供 asynchronous event-driven(异步事件驱动)的...

  • Netty学习总结第零篇:宏观理解

    学习中关键点 强势技能的学习+对应生态圈--核心竞争力 重视基础--掌握白盒知识 节奏感--稳健的步伐 思维方式的...

  • 初窥

    初窥世界的美好 白的风 白的肌肤 和盈盈一握的腰肢 在你的头发里 有一个蓝色大海的梦 蓝的帆船和蓝的浪花 自然是美...

  • 初窥

    这个积分管理项目已经到收尾的阶段了,感受良多。 对于错误处理这方面这周我的规划也更为清楚一些了。明天如果能够预期结...

  • netty通信框架

    Netty入门教程——认识Netty彻底理解Netty,这一篇文章就够了 Netty特点 并发高 传输快 封装好 ...

  • 初窥南京

    古鸡鸣寺门外,一条长满爬山虎的墙。 城墙下的绿植。 1912街区,没有什么能过阻挡,我对自由的向往。 午后墙壁上斑...

  • 初窥HTTP

    要知道HTTP肯定要先知道WWW,下面我用思维导图来介绍下: 1,弄懂了上图的关系,接下来着重介绍HTTP。 先介...

  • 初窥Scrapy

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据...

  • mongodb初窥

    启动MongoDB服务:在 MongoDB 安装目录的 bin 目录下执行mongod show dbs -- 显...

网友评论

    本文标题:Netty初窥宏观理解

    本文链接:https://www.haomeiwen.com/subject/cdmcaqtx.html