前面简单的介绍了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. H3C PPP显示与调试

  2. java中的常量和变量

    变量的概念: 占据着内存中的某一个存储区域; 该区域有自己的名称(变量名)和类型(数据类型); 该区域的数据可以在同一类型范围内不断变化; 为什么要定义变量: 用来不断的存放同一类型的常量,并可以重复 ...

  3. 深入java面向对象四:Java 内部类种类及使用解析(转)

    内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...

  4. [转载] 学会使用Web Service上(服务器端访问)~~~

    http://www.360doc.com/content/10/0712/12/541242_38461863.shtml# 关于什么是Web Service,相信在很多地方都会有介绍.简单的讲,W ...

  5. Laravel 5.* 执行seeder命令出现错误的解决方法

    最近在使用Laravel开发一个项目,测试中需要增加数据库基础数据动作,当第一次执行完`php artisan db:seed` 后,增加新的seeder文件时执行会报错.错误信息如下`[Reflec ...

  6. 如何查看python的当前版本号

    每次打开python顶端会显示版本号 在程序中判断版本号可以通过import sys  sys.version 在dos下可以通过python -V查看

  7. hadoop-1.2.1 伪分布配置

    首先JDK安装及相关环境变量配置 # Java environment setting JAVA_HOME=/usr/java/default CLASSPATH=.:$JAVA_HOME/lib/t ...

  8. 访问HTML可以,访问PHPfile not found

    www目录的所有者和所属组都改为nginx用户试一下. 参考命令: chown nginx.nginx /home/www ps aux |grep nginx   看一下您的nginx是以哪个用户的 ...

  9. 【ts】 VSCode自动编译TypeScript终端报错

    一.点击终端--运行任务--选择tsc:监视 - tsconfig.json后,终端报出了如下错误:error TS5058: The specified path does not exist 在网 ...

  10. Educational Codeforces Round 54 (Rated for Div. 2) D Edge Deletion (SPFA + bfs)

    题目大意:给定你一个包含n个点m条边的无向图,现在最多在图中保留k条边,问怎么删除多的边,使得图中良好的节点数最多,求出保留在图中的边的数量和编号. 良好的节点定义为:删除某条边后该点到点1的最短距离 ...