netty

netty学习

Posted by Link on August 30, 2020

netty

简介

Netty是一个java网络编程框架。 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。

  • 设计
    • 针对多种传输类型的统一接口 - 阻塞和非阻塞
    • 简单但更强大的线程模型
    • 真正的无连接的数据报套接字支持
    • 链接逻辑支持复用
  • 易用性
    • 大量的 Javadoc 和 代码实例
    • 除了在 JDK 1.6 + 额外的限制。(一些特征是只支持在Java1.7 +。可选的功能可能有额外的限制。)
    • 性能
    • 比核心 Java API 更好的吞吐量,较低的延时
    • 资源消耗更少,这个得益于共享池和重用
    • 减少内存拷贝
  • 健壮性
    • 消除由于慢,快,或重载连接产生的 OutOfMemoryError
    • 消除经常发现在 NIO 在高速网络中的应用中的不公平的读/写比
  • 安全
    • 完整的 SSL / TLS 和 StartTLS 的支持
    • 运行在受限的环境例如 Applet 或 OSGI
  • 社区
    • 发布的更早和更频繁
    • 社区驱动

并发高/传输快/封装好

  1. 并发高 nio
    1. i/o多路服用,阻塞select而不是socket i/o
  2. 传输快
    1. 零拷贝/堆外内存

netty构成部分

  1. Channel nio的基本结构,能执行一个或多个不同的io操作的开放连接
  2. Callback 一种通知应用操作完成的方式,在某个io完成后执行的方法
  3. Future 另一种通知应用操作完成的方式,作为一个异步操作结果的占位符,它将在将来的某个时候完成并提供结果 ChannelFuture??
  4. Event和Handler 事件和事件处理器
  5. Selector, Event, Event Loop

netty基本构建模块

  1. BootStrap 引导类
  2. Channel socket交互操作集的封装
  3. Channel Handler 事件处理器
  4. Channel Pipeline 提供了一个容器给 ChannelHandler 链并提供了一个API 用于管理沿着链入站和出站事件的流动
  5. EbentLoop channel的调度器
  6. Channel Future 当channel异步事件完成后通知ChannelFuture
  7. netty不需要多线程同步