【第1篇】Netty初窥宏观理解

一、基本简要

  • 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 其他说明

Netty 官方
用户手册
Netty All Documents

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSo...
    敢梦敢当阅读 8,861评论 0 50
  • 简单系统的介绍一下Netty。 在网络编程体系设计中,有几个名词概念简单解释一下: 1 什么是同步?2 什么是异步...
    郭艺宾阅读 2,114评论 0 4
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,067评论 1 32
  • 2017.12.27 莉子 忙碌的状态持续了几天自己就完全习惯了,昨天晚上稍微空闲了一点,自己竟然不知道该做什么了...
    莉子_ac68阅读 203评论 0 0
  • 学会拒绝 尤其是拒绝父母 马上就会长大 不管拒绝有多难 让别人承受自己的命运 才能活出自己的快乐 总是把别人想象的...
    雁满天阅读 85评论 0 0