Netty快速入门(06)Netty介绍
前面简单的介绍了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介绍的更多相关文章
- Netty快速入门(01)Linux I/O模型介绍
Netty简述 Netty是一个高性能的网络编程框架. 上面提到了几个关键的字眼,高性能,网络编程,框架.这些概括Netty的本质. Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务 ...
- 网络应用框架Netty快速入门
一 初遇Netty Netty是什么? Netty 是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能.可扩展协议的服务器和客户端 ...
- Netsharp快速入门(之1) 介绍及需求说明
作者:秋时 杨昶 时间:2014-02-15 转载须说明出处 第一章 快速入门介绍 Netsharp是一个企业基础业务管理平台,介绍Netsharp分三个系列,分别是: 1. N ...
- Netty快速入门(08)ByteBuf组件介绍
前面的内容对netty进行了介绍,写了一个入门例子.作为一个netty的使用者,我们关注更多的还是业务代码.也就是netty中这两种组件: ChannelHandler和ChannelPipeline ...
- Netty快速入门(09)channel组件介绍
书接上回,继续介绍组件. ChannelHandler组件介绍 ChannelHandler组件包含了业务处理核心逻辑,是由用户自定义的内容,开发人员百分之九十的代码都是ChannelHandler. ...
- Netty快速入门(05)Java NIO 介绍-Selector
Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是 ...
- Netty快速入门(03)Java NIO 介绍-Buffer
NIO 介绍 NIO,可以说是New IO,也可以说是non-blocking IO,具体怎么解释都可以. NIO 1是在JSR51里面定义的,在JDK1.4中引入,因为BolckingIO不支持高并 ...
- Netty快速入门(02)Java I/O(BIO)介绍
BIO简介 Java I/O,也叫Blocking I/O,也就是阻塞式I/O. BIO的流程比较简单,在服务端创立一个ServerSocket去监听,等待连接.客户端创建一个Socket连接过来,服 ...
- Netty快速入门(10)Reactor与Netty
Reactor模式 Reactor是1995年由道格拉斯提出的一种高性能网络编程模式.由于好多年了,当时的一些概念与现在略有不同,reactor模式在网络编程中是非常重要的,可以说是NIO框架的典型模 ...
随机推荐
- Attention is all your need 谷歌的超强特征提取网络——Transformer
过年放了七天假,每年第一件事就是立一个flag——希望今年除了能够将技术学扎实之外,还希望能够将所学能够用来造福社会,好像flag立得有点大了.没关系,套用一句电影台词为自己开脱一下——人没有梦想,和 ...
- 【u128】又一个数字游戏
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小明拿出了一个素数集合,{2, 3, 5, 7, 11, 13, -, 127, -},他发现,从小到 ...
- java 标准流
标准输入流: System.in 默认表示的是键盘录入 标准输出流: System.out 默认表示的是屏幕输出 Eg: package june6D; import java.io. ...
- js 键盘事件keyCode 总结
开发中经常页面中的某些按钮或元素需要绑定到键盘的输入事件 keydown.keyup 事件 keydown 键盘按下触发事件 $("#btn").keydown(function( ...
- Spring激活profile的方式
Spring中激活profile的方法:设置spring.profiles.active和spring.profiles.default这两个属性 设置激活profile属性的地方(优先级由高到底) ...
- vue 实例未加载完成显示 花括号解决方案
css [v - cloak] { display: none!important; } html < div id = "app" v-cloak >
- MFC下获取系统内存和当前进程的内存使用情况
GlobalMemoryStatusEx来获取系统的内存使用情况 GetProcessMemoryInfo获取某个进程的内存使用情况.和任务管理器看到的是一样的. 具体代码如下: void GetSy ...
- python 下载bilibili视频
说明: 1.清晰度的选择要登录,暂时还没做,目前下载的视频清晰度都是默认的480P 2.进度条仿linux的,参考了一些博客修改了下,侵删 3.其他评论,弹幕之类的相关爬虫代码放在了https://g ...
- Android APP前后台状态切换
getActivity().getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleC ...
- C++Review5_Swap交换
面试中可能会问到交换两个变量的值有几种实现方式,对这方面有一定了解还是有必要的,简单罗列一下几种方式,具体介绍查看参考链接: 1.中间变量:->这个最常见了 2.加减法: 3.异或法: 4.sw ...