一、基本简要
-
1、Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。 它极大地简化并简化了TCP和UDP套接字服务器等网络编程。
-
2、“快速简便”并不意味着最终的应用程序会受到可维护性或性能问题的影响。 Netty经过精心设计(资源优雅关闭,在事件驱动模型使用观察者模式,Reactor模型),具有丰富的协议,如FTP,SMTP,HTTP以及各种二进制和基于文本的传统协议。 因此,Netty成功地找到了一种在不妥协的情况下实现易于开发,性能,稳定性和灵活性的方法。
-
3、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平台上构建高并发、分布式和容错应用的工具包和运行时
网友评论