`

Netty 简介 - 高性能原理 + 关键组件模型

    博客分类:
  • Java
阅读更多

Netty > java.nio + java.net


 

Netty 是一个 NIO 框架。
它的设计强调了“分离关注点”(Separation Of Concerns)。
它通过事件机制,将业务逻辑与无关的技术逻辑隔离,通过抽象层填补 基础平台 和 业务开发 之间的鸿沟。
Netty 极大地简化了网络编程(如,TCP/UDP socket 服务器)。可以利用它更快速容易地开发网络应用。

 

Netty 如何实现高性能

Netty 没有 Java 核心类库那么强烈的通用性、跨平台等负担。
它针对性能等特定目标、及Linux等特定环境,采用了极致的优化手段。
 

  • 通过更优雅的 Reactor 模式实现灵活的线程模型
    利用 EventLoop 等机制,高效地管理大量的 Channel
  • 充分利用 Java 的 Zero-Copy 机制等多种技巧,从多种角度降低内存分配和回收的开销。如:
    池化的 Direct Buffer 可提高IO性能、减少对象的创建与销毁。
    利用反射直接操纵 SelectionKey

  • 使用更多本地代码。如,直接利用 JNI 调用 Open SSL,性能比 Java 内建的 SSL引擎更好。
  • 通信协议序列化 等其它方面的优化。

Writing Highly Performant Network Frameworks on the JVM - A Love-Hate Relationship
 

如,Netty 的 ChannelOutboundBuffer 中利用 AtomicLongFieldUpdater 而不是直接使用 AtomicLong。

public final class ChannelOutboundBuffer {
  private static final AtomicLongFieldUpdater TOTAL_PENDING_SIZE_UPDATER =
      AtomicLongFieldUpdater.newUpdater(ChannelOutboundBuffer.class, "totalPendingSize");

  private volatile long totalPendingSize;
  ...
}

 

借鉴意义

虽然 Netty 的很多优化技巧对于追求极致性能有一定借鉴意义,但一般业务开发中要谨慎采用
如,直接调用本地方法会对加大内存管理的难度,不同平台上部署应用时兼容性风险较大。
不同版本的JDK中,某些 Unsafe 方法的命名空间就不同。

 

使用 Netty 时的关键组件

基于官方代码示例 EchoServer



 

  • ServerBootstrap:服务端程序入口。Netty通过这种机制简化服务端的生命周期管理。
    创建 Channel、注册端口、绑定 Handler 等。
    客户端对应的是 Bootstrap
  • Channel:Netty 中的各类 Channel 针对应用开发,提供了相对易用的抽象方法。
    Channel 和 Selector 等概念依然是 Netty 的基础组件。
  • EventLoop:这是 Netty 处理事件的核心机制。它负责 注册感兴趣的事件、调度Handler 等。
  • ChannelFuture:这是 Netty 实现异步IO 的基础。它保证了同一个 Channel 操作的调用顺序。
    Netty 扩展了 Java 标准 Future,提供了针对特定场景的 Future
  • ChannelHandler:这是放置业务逻辑的地方。
  • ChannelPipeline:这是 ChannelHandler 链条的容器。


 

 

  • 大小: 53.8 KB
  • 大小: 54.3 KB
  • 大小: 78.5 KB
分享到:
评论

相关推荐

    netty-netty-4.1.69.Final.tar.gz

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“netty-netty-4.1.69.Final.tar.gz”文件是Netty的最新稳定版本,版本号为4.1.69.Final,它是一个压缩包...

    基于springBoot + netty-socket.io + mongodb 的即时聊天后台.zip

    MongoDB是一个开源的NoSQL数据库系统,以其灵活的数据模型(JSON-like格式)、高性能、高可用性和可扩展性而闻名。在即时聊天系统中,MongoDB可以存储用户信息、聊天记录等数据。由于其文档型数据结构,对于处理结构...

    NettyDemo-master.zip

    - 异步模型使得 Netty 能够在处理大量并发连接时保持高性能。 - 通过 ChannelFuture 和 ChannelPromise,Netty 支持异步操作的链式调用和回调机制。 5. **Android 应用中的注意事项** - Android 的内存限制可能...

    netty-all-4.1.28.Final.jar

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在Java领域,Netty因其高效、稳定和丰富的特性,被广泛应用于各种分布式系统、微服务架构以及高并发场景。...

    netty-all-4.1.5.Final完整pom.xml文件配置

    Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。在Java世界中,Netty因其易用性、灵活性以及强大的性能而备受推崇,广泛应用于各种分布式系统、微服务架构以及高...

    Netty-all-4.0.23.Final.jar

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"Netty-all-4.0.23.Final.jar"文件是Netty框架的一个完整集合,包含了4.0.23.Final版本的所有组件和功能...

    netty4-demos

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“netty4-demos”项目显然包含了关于 Netty 4 的一系列示例,帮助开发者理解并应用 Netty 框架。 在深入...

    Netty实战-netty-in-action-2.zip

    Netty是一款高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本教程可能涵盖了Netty的基本概念、核心组件、以及如何构建高效网络应用的实践案例。 Netty的核心概念包括: ...

    netty-all-5.0.0 包含Alpha1 Alpha2

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在Android平台上,尽管Java NIO (非阻塞I/O)并不直接支持,但开发者依然可以通过引入第三方库如Netty来实现...

    netty实战-netty-thing.zip

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“netty实战-netty-thing.zip”压缩包可能包含了一个关于Netty实战项目的源代码和相关文档,名为“netty-...

    netty-4.1.4-jar包

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“netty-4.1.4-jar包”包含了两个重要的文件:“netty-all-4.1.17.Final.jar”和“netty-all-4.1.17....

    netty 4.1 中文api 帮助文档 + 用户指南

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨 Netty 4.1 的中文API帮助文档和用户指南,以及如何利用这些资源来提升你的网络编程...

    netty-4.1.19.Final

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"Netty-4.1.19.Final"版本是该框架的一个稳定版本,提供了所有功能的一体化打包,包括源代码,方便开发者...

    NettyRPC-master

    Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发可维护的高性能协议服务器和客户端。RPC(Remote Procedure Call)是一种允许程序在分布式环境中调用另一个系统上的程序的方法,就像是在本地调用一样,...

    netty-4.1.9.Final

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“netty-4.1.9.Final”版本是Netty框架的稳定版本,提供了完整的开发包,包含了所有必要的jar文件,以便...

    Netty 实战-netty-practise.zip

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"Netty 实战-netty-practise.zip"文件很可能包含一系列的示例代码和教程,帮助开发者深入理解并熟练运用...

    Netty实战-netty-in-action.zip

    Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。以下是基于这个主题的详细知识点讲解: 1. **Netty简介**: Netty是由JBOSS提供的一个开源框架,最初由...

    netty-redis-zookeeper高并发实战学习-netty-redis-zookeeper.zip

    Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。Redis则是一款内存数据结构存储系统,既可以用作数据库,也可以用作缓存和消息中间件。而ZooKeeper是一个分布式的...

    Netty实战-leolee-netty-practice.zip

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"Netty实战-leolee-netty-practice.zip"压缩包中的项目"leolee-netty-practice-master"显然是一个针对...

Global site tag (gtag.js) - Google Analytics