zoukankan      html  css  js  c++  java
  • Netty的出现

    原生NIO存在的问题

    1. NIO的类库和API复杂, 使用麻烦: 需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。
    2. 需要具备其他的额外技能: 比如: Java多线程编程, 由于NIO编程设计到Reactor模式, 程序员必须对多线程和网络编程非常熟悉, 才能编写出高质量的NIO程序。
    3. 开发工作量和难度都非常大: 例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。
    4. JDK NIO 的 Bug: 例如臭名昭著的 Epoll Bug, 它会导致Selector空轮询, 最终导致CPU 100%。直到JDK1.7 版本该问题仍然存在, 未被根本解决。

    Netty官网说明

    • 官网: https://netty.io

    • Netty is an asynchronous event-driven network application framework
      for rapid development of maintainable high performance protocol servers & clients.

      • 翻译一下就是: Netty是一个异步的基于事件驱动的网络应用框架, 用于快速开发可控的高性能协议的服务端与客户端
    • 架构图

      img

      • Core(核心):
        • Extensible Event Model: 可扩展的事件模型
        • Universal Communication API: 通用的通信API
        • Zero-Copy-Capable Rich Byte Buffer: 可以实现零拷贝的丰富的字节缓冲区
      • Transport Services(传输服务):
        • Socket & Datagram: Socket套接字 以及 Datagram(Spark 及 python中常见的数据格式)
        • HTTP Tunnel: HTTP 隧道
        • In-VM Pipe: 虚拟机管道
      • Protocol Support(协议支持):
        • HTTP & WebSocket
        • SSL(Secure Sockets Layer) StartTLS(能够让明文的通信连线直接成为加密连线, 而不需要使用另一个特别的端口来进行加密通信)
        • Google Protobuf (是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等, 在大数据领域也是常用的)
        • zlib/gzip Compression(zlib/gzip 压缩)
        • Large File Transfer(大文件传输)
        • RTSP(Real Time Streaming Protocol 实时流传输协议)
        • Legacy Text Binary Protocols with Unit Testability(具有单元可测试性的文本二进制协议)

    Netty的优点

    • Netty对JDK自带的NIO的API进行了封装, 解决了原生NIO存在的问题。
    • 设计优雅: 适用于各种传输类型的统一API阻塞和非阻塞Socket; 基于灵活且可扩展的事件模型, 可以清晰地分离关注点;高度可订制的线程模型 - 单线程, 一个或多个线程池。
    • 使用方便: 详细记录的JavaDoc, 用户指南和是示例; 没有其他依赖项, JDK5(Netty 3.x) 或 6 (Netty 4.x) 就足够了。
    • 高性能、吞吐量更高: 延迟更低; 减少资源消耗; 最小化不必要的内存复制。
    • 安全: 完整的 SSL/TLS 和 StartTLS 支持。
    • 社区活跃、不断更新; 社区活跃, 版本迭代周期短, 发现的 Bug 可以被及时修复, 同时, 更多的新功能会被加入。
  • 相关阅读:
    Chamfer Distance--倒角距离
    javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    mysql单个索引和联合索引的区别
    鸽一下
    笔记:关于 INT1 INT0 中断说明记录 (2020-07-16)[85.22%]
    使用 Git 管理 KiCad EDA 项目文件 [2020-06-28][26.77%]
    从单片机基础到程序框架 2019版(2020-07-04)[12.66%]
    KiCad Pcbnew 中现代工具箱 (2020-06-24)[98.33%]
    【营养研究一】鸡蛋和牛奶的营养对比 (2020-06-23)[95.89%]
    git 忽略上传指定文件 命令
  • 原文地址:https://www.cnblogs.com/ronnieyuan/p/12015006.html
Copyright © 2011-2022 走看看