重新整理版:https://blog.csdn.net/the_fool_/article/details/83002152

参考资料:

官方文档:http://netty.io/wiki/user-guide-for-4.x.html

全部DEMO:https://github.com/netty/netty

Spring中获取Bean:https://www.cnblogs.com/yjbjingcha/p/6752265.html

        网上查找Netty资料,看完了官方文档,也做了Demo,现在心里仍然有很多很多疑惑,于是拜读大牛的《Netty权威指南》一书,略作总结:

        前置条件:
Socket、IO。

1、是什么  :是一种NIO(非阻塞)的信息处理框架。其实这里已经说的很明确了,只是最开始自己没有看懂,才感觉理解很困难,所以,此时需要深入了解一下NIO的概念。这里我不做总结。建议查一下资料有个概念。
      个人理解:就是对JDK提供的NIO进行封装(Netty03),增加稳定性、高效性、以及易用性!

2、出现:

        JAVA在1.4以前(忘了),都只有BIO(同步阻塞)来处理信息(参考ServerSocket与Socket使用),并且没有异步IO的缓冲区ByteBuffer等。1.4时,以JSR-51身份正式发布(参考ServerSocketChannel与SocketChannel的使用)。

3、相关概念:

  
a、缓冲区Buffer:简单说,缓冲器无非是把字符或者字节数据读取到缓冲区,再从缓冲区写出,这种方式肯定比一个字节一个字节的写要快很多。

   b、通道Channel: 通道与输入输出流最大的区别就是,它可以读数据也可以写数据!

  c、多路复用器Selector:NIO核心。Channel会注册到Selector,Selector对Channel的轮询获取就绪的Channel进行IO操作。

4、应用场景:

  
Tomcat、Dubbo、淘宝那个Mq等底层通信。

可以说只要有通信的地方,就可以用Netty。比如网页上嵌入一个聊天工具窗口,比如向客户端推送数据,都可以使用Netty。

5、官方文档中的解释:

问题:

          现在我们使用通用应用程序或库来相互通信。例如,我们经常使用HTTP客户端库从web服务器检索信息,并通过web服务调用远程过程调用。然而,一般目的协议或其实现有时不能很好地扩展。这就像我们不使用通用的HTTP服务器来交换巨大的文件、电子邮件消息和几乎实时的消息(如财务信息和多人游戏数据)一样。需要的是一个高度优化的协议实现,专门用于特殊目的。例如,您可能希望实现一个针对基于ajax的聊天应用程序流媒体或大型文件传输进行优化的HTTP服务器。您甚至可以设计和实现一个全新的协议,该协议是根据您的需要定制的。另一个不可避免的情况是,您必须处理遗留的私有协议,以确保与旧系统的互操作性。在这种情况下,重要的是我们能够多快地实现该协议,而不牺牲最终应用程序的稳定性和性能

解决方案:

Netty项目致力于提供异步事件驱动的网络应用框架和工具,以快速开发可维护的高性能·高可扩展性协议服务器和客户端。

          换句话说,Netty是一个NIO客户端服务器框架,它支持快速、轻松地开发网络应用程序,如协议服务器和客户端。它极大地简化了网络编程,如TCP和UDP套接字服务器开发。“快速和简单”并不意味着产生的应用程序会受到可维护性或性能问题的影响。Netty已经通过实现许多协议(如FTP、SMTP、HTTP以及各种基于二进制和文本的遗留协议)获得的经验进行了精心设计。因此,Netty成功地找到了一种方法来实现开发的易用性、性能、稳定性和灵活性,而不需要妥协。

Netty设计的目的是为您提供最舒适的体验,无论是在API方面还是在实现方面。

最新文章

  1. [转载]El Capitan 中 SIP 介绍
  2. LPC1768/1769之CAN控制器概述(附库函数下载地址)
  3. django admin中保存添加的数据提示need string or buffer, int found
  4. (知识分享)软硬件调试九法:第九条规则 如果你不修复一个bug,它将永远 存在
  5. JS移动端滑屏事件
  6. iOS sha1加密算法
  7. 淘宝付邮试用Chrome桌面提醒插件(含源码)
  8. [转载] Codis作者黄东旭细说分布式Redis架构设计和踩过的那些坑们
  9. SciTE 文本编辑器
  10. make_pair() (STL)
  11. CSS3之背景剪裁Background-clip
  12. unexpected problem
  13. 19.最省钱的app发短信方法
  14. Precision 7520双硬盘无法识别固态硬盘
  15. verilog 介绍
  16. nginx如何安装第三方模块
  17. PHP保留两位小数并且四舍五入及不四舍五入的方法
  18. 剥开比原看代码03:比原是如何监听p2p端口的
  19. 【转】Appium移动自动化测试(三)--安装Android模拟器
  20. Python小白学习之路(八)—【变量】【基本数据类型分类】【集合】【集合的功能】

热门文章

  1. 给WPF文字加多条修饰线
  2. 正定矩阵(definite matrix)
  3. Python实例讲解 -- 获取本地时间日期(日期计算)
  4. WPF 实现拖动工具箱效果
  5. WPF 4 DataGrid 控件(进阶篇二)
  6. Binding的三种方式
  7. wpf VisualBrush 的使用,可创建重复图像
  8. nodejs redis遇到的一个问题解决
  9. mysql8解压版安装
  10. ASP.NET Web API 直到我膝盖中了一箭【1】基础篇