前面简单的介绍了Java I/O 和NIO,写了示例程序。

Java I/O是阻塞的,为了让它支持多个并发,就要针对每个链接启动线程,这种方式的结果就是在海量链接的情况下,会创建海量的线程,就算用线程池去缓解,也是治标不治本。所以,Java I/O 不适合高并发高性能的网络编程需求。

NIO的出现就是为了解决这个问题,NIO中一个线程可以关注多个链接,解决了线程问题,前面也演示了如何用NIO编程。大家可以看到使用NIO是非常复杂的,可以说是陷阱重重,不是在网络编程方面很资深的程序员,很难用NIO编写出正常的程序,甚至高级程序员也不推荐用。

Netty介绍

写程序比较开心的就是碰到这种情况,一定会有很多框架去解决各种问题,比如JDBC直接写很复杂,就会有hibernate和mybatis等框架,让开发变得简单。NIO编程也是一样,出现过很多框架,相信很多人听说过mina框架,和netty是同一个作者。而netty是目前最流行的解决NIO编程问题的框架。我们打开netty的官网,https://netty.io,首页最上面就是netty的介绍

翻译成中文就是:

Netty是一个提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

用NIO也能开发这样的程序,但是很复杂,如果用netty,就能很简单很快速的开发高性能高可靠的程序,首页上的图片就是netty的框架架构:

我们在介绍Linux IO模型的时候也简单看过。netty分成三大部分,一个是核心部分(Core),一个是传输服务部分(Transport Services),还有一个部分提供协议支持(Protocol Support)。我们前面介绍过NIO的buffer,而netty的核心部分有netty自定定义的一套Byte Buffer,就是图中的Zero-Copy-Capable Rich Byte Buffer,NIO的buffer比较复杂,读写模式还要手动切换,不容易理解,netty的Byte Buffer要好很多。

核心部分还定义了一套通用的通信API(Universal Communication API),无论程序走tcp协议,还是udp协议,还是其它,都是通过统一的API通讯的。

核心部分还提供了一个可扩展的事件模型(Extensible Event Model),是基于事件的。这三部分共同构成了netty的核心部分。

在协议支持部分,提供了常用的通信协议的支持,比如http,tcp等等。除了通信协议,还提供了常用的编码解码协议的支持。在传输服务部分,提供了常见的传输服务的支持。根据图片上的可以看出。

Netty特性

netty的特性在官方网站的首页列举了出来,是英文的,我们来翻译一下:

在设计方面来说:

1)统一的API,适用于不同的协议(阻塞和非阻塞)

2)基于灵活、可扩展的事件驱动模型(SEDA)

3)高度可定制的线程模型

4)可靠的无连接数据Socket支持(UDP)

在性能方面:

1)更好的吞吐量,低延迟

2)更省资源

3)尽量减少不必要的内存拷贝(这也是快的原因之一)

安全方面:

完整的SSL/TLS和STARTTLS的支持

在易用性方面:

1)完善的Java doc,用户指南和样例(个人觉得并不是很完善,国内的书籍也只有一两本还可以)

2)仅依赖于JDK1.6(netty 4.x)

netty是个很流行的框架,在很多分布式框架和大数据框架都有用到,国内外的很多大公司也都在用(比如国内BAT等等),感兴趣可以查询一下,这里不再举例子。netty是一个框架,从学习netty的过程中,我们也可以学到很多编程的技巧,netty的代码也值得我们去读一读,能从里面学到很多东西。

本文由博客一文多发平台 OpenWrite 发布!

Netty快速入门(06)Netty介绍的更多相关文章

  1. Netty快速入门(01)Linux I/O模型介绍

    Netty简述 Netty是一个高性能的网络编程框架. 上面提到了几个关键的字眼,高性能,网络编程,框架.这些概括Netty的本质. Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务 ...

  2. 网络应用框架Netty快速入门

    一 初遇Netty Netty是什么? Netty 是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能.可扩展协议的服务器和客户端 ...

  3. Netsharp快速入门(之1) 介绍及需求说明

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 第一章 快速入门介绍 Netsharp是一个企业基础业务管理平台,介绍Netsharp分三个系列,分别是: 1.         N ...

  4. Netty快速入门(08)ByteBuf组件介绍

    前面的内容对netty进行了介绍,写了一个入门例子.作为一个netty的使用者,我们关注更多的还是业务代码.也就是netty中这两种组件: ChannelHandler和ChannelPipeline ...

  5. Netty快速入门(09)channel组件介绍

    书接上回,继续介绍组件. ChannelHandler组件介绍 ChannelHandler组件包含了业务处理核心逻辑,是由用户自定义的内容,开发人员百分之九十的代码都是ChannelHandler. ...

  6. Netty快速入门(05)Java NIO 介绍-Selector

    Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是 ...

  7. Netty快速入门(03)Java NIO 介绍-Buffer

    NIO 介绍 NIO,可以说是New IO,也可以说是non-blocking IO,具体怎么解释都可以. NIO 1是在JSR51里面定义的,在JDK1.4中引入,因为BolckingIO不支持高并 ...

  8. Netty快速入门(02)Java I/O(BIO)介绍

    BIO简介 Java I/O,也叫Blocking I/O,也就是阻塞式I/O. BIO的流程比较简单,在服务端创立一个ServerSocket去监听,等待连接.客户端创建一个Socket连接过来,服 ...

  9. Netty快速入门(10)Reactor与Netty

    Reactor模式 Reactor是1995年由道格拉斯提出的一种高性能网络编程模式.由于好多年了,当时的一些概念与现在略有不同,reactor模式在网络编程中是非常重要的,可以说是NIO框架的典型模 ...

随机推荐

  1. avalon2 第一个demo

    <!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <m ...

  2. torch.optim优化算法理解之optim.Adam()

    torch.optim是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用,未来更多精炼的优化算法也将整合进来. 为了使用torch.optim,需先构造一个优化器对象Opti ...

  3. setTimeout与setInterval有何区别?

    ①setTimeout和setInterval的语法相同.它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码. ②不过这两个函数还是有 ...

  4. Example-09-01

    #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> int min(int a, int ...

  5. dotnet 设计规范 · 结构体定义

    X 不要给结构体默认构造函数 默认的C#编译器也不让开发者定义有默认构造的结构体 X 不要定义易变的属性 易变的属性指的是在调用属性返回值的时候返回的是新的实例,易变的属性会有很多的问题. ✓ 需要确 ...

  6. java接口(interface)

    引入:抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”→ 接口; 例子: 生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范 ...

  7. H3C 查看RIP的debugging信息

  8. H5 多媒体标签

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 21个项目玩转深度学习:基于TensorFlow的实践详解02—CIFAR10图像识别

    cifar10数据集 CIFAR-10 是由 Hinton 的学生 Alex Krizhevsky 和 Ilya Sutskever 整理的一个用于识别普适物体的小型数据集.一共包含 10 个类别的 ...

  10. RocketMQ(消息重发、重复消费、事务、消息模式)

    分布式开放消息系统(RocketMQ)的原理与实践 RocketMQ基础:https://github.com/apache/rocketmq/tree/rocketmq-all-4.5.1/docs ...