zoukankan      html  css  js  c++  java
  • 1. Netty 概述

    原生 NIO 存在的问题

    1. NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握 Selector, ServerSocketChannel, SocketChannel, ByteBuffer 等.
    2. 需要具备其它的额外技能: 要熟悉 Java 多线程编程, 因为 NIO 涉及到 Reactor(反应器) 模式.
    3. 开发工作量和难度非常大: 例如客户端面临断线重连, 网络闪断, 半包读写, 失败缓存, 网络阻塞和异常流的处理.
    4. epoll bug, 它会导致 Selector 空轮询, 最终导致 CPU 100%. 官方声称在 JDK1.6 版本的 update18 修复了该问题, 但是直到 JDK1.7 版本该问题仍旧存在, 只不过该 bug 发生概率降低了一些而已, 它并没有被根本解决.

    Netty

    Netty 是一个 异步 事件驱动 网络应用框架. 用来快速开发高性能的服务端或客户端.

    下图是来自 Netty 官网的一张图.

    这张图说明了 Netty 都支持哪些协议以及传输服务.
    • 传输服务: 支持BIO和NIO
    • 协议支持: HTTP、Protobuf、二进制、文本、WebSocket 等一系列常见协议都支持. 还支持通过实行编码解码逻辑来实现自定义协议.
    • Core核心: 可扩展事件模型、通用通信API、支持零拷贝的 ByteBuf 缓冲对象

    优点

    1. 其实主要就是简化了 NIO 的开发过程.
    2. 统一的阻塞和非阻塞 Socket API.
    3. 高度定制的线程模型.
    4. 零拷贝(高性能, 吞吐量更高).
  • 相关阅读:
    【笔记】【dp模型】
    【刷题】【dp】【背包】金明的预算
    建模结束了——5.3
    HDU
    洛谷 P2734 [USACO3.3]游戏 A Game
    洛谷 P4095 [HEOI2013]Eden 的新背包问题
    洛谷 P1156 垃圾陷阱
    洛谷 P1833 樱花
    洛谷 P3966 [TJOI2013]单词
    洛谷 P5357 【模板】AC自动机(二次加强版)
  • 原文地址:https://www.cnblogs.com/scikstack/p/13522999.html
Copyright © 2011-2022 走看看