zoukankan      html  css  js  c++  java
  • 【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方面还是在实现方面。

  • 相关阅读:
    第一节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表
    Tensorflow 错误:Unknown command line flag 'f'
    Python 多线程总结
    Git 强制拉取覆盖本地所有文件
    Hive常用函数 傻瓜学习笔记 附完整示例
    Linux 删除指定大小(范围)的文件
    Python 操作 HBase —— Trift Trift2 Happybase 安装使用
    梯度消失 梯度爆炸 梯度偏置 梯度饱和 梯度死亡 文献收藏
    Embedding 文献收藏
    深度学习在CTR预估中的应用 文献收藏
  • 原文地址:https://www.cnblogs.com/the-fool/p/11054121.html
Copyright © 2011-2022 走看看