• 【Netty整理02-详细使用】Netty入门


    重新整理版: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方面还是在实现方面。

  • 相关阅读:
    重构改善既有代码设计--重构手法19:Replace Data Value with Object (以对象取代数据值)
    重构改善既有代码设计--重构手法18:Self Encapsulate Field (自封装字段)
    重构改善既有代码设计--重构手法16:Introduce Foreign Method (引入外加函数)&& 重构手法17:Introduce Local Extension (引入本地扩展)
    重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)
    重构改善既有代码设计--重构手法14:Hide Delegate (隐藏委托关系)
    JAVA设计模式:蝇量模式
    JAVA设计模式:桥接模式
    重构改善既有代码设计--重构手法13:Inline Class (将类内联化)
    leetcode-485-Max Consecutive Ones
    leetcode-475-Heaters
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054121.html
Copyright © 2020-2023  润新知