一、Netty简介
什么是Netty?
1、高性能事件驱动,异步非阻塞的IO加载开源框架.
它是由JBoss提供,用于建立TCP等底层链接.基于Netty可以建立高性能的HTTP服务器,快速开发高性能,高可靠型网络服务器和客户端程序,支持HTTP、webSocket、 Protobuf( protobuf是google序列化的工具,主要是把数据序列化成二进制的数据来传输用的)、Binary、UDP。尤其是因为其具有高性能非阻塞性的特点,可以作为socket底层的通信基础,用到的服务器有Dubbo、Mina等
2、基于NIO的客户端,服务端编程框架
使用Netty可以确保快速和简单的开发出一个网络应用,例如实现了某种协议的客户端、服务端应用,Netty相当简化和流线化网络应用的开发过程,比如TCP和UDP的Socket服务开发,
3、提供了非常可靠的稳定性和伸缩性
Netty 的快速和简单,并不意味着会让最终的应用程序,产生维护性和性能上的问题,Netty是一个吸收了多种协议的,实现经验的,并且经过了相当精心的设计,最终Netty找到一种方式,在保证易用开发的同时,还保证了其应用的性能,稳定性和良好的伸缩性。
二、Netty使用场景
1、Netty被广泛应用于高性能领域
Netty 作为一个高性能的NIO框架,在高性能领域,譬如游戏、大数据,分布式计算领域,得到了广发的应用。
2、Netty被广泛应用于多线程并发领域
​Netty 的多线程模型采用 Reactor模式, Reactor模式主要由多路复用器,事件分发器,事件处理器组成,可以分为三种,第一种单线程模型,所有的IO都由一个线程完成,即多路复用、事件分发、处理都是在一个Reactor线程完成的。第二种多线程模型,为了解决单线程模型的一些问题,演化而来的多线程模型,在多线程模型的基础上,又演化出主从线程模型,采用多个Reactor,每个Reactor都在自己单独的线程里执行,如果是多核,就可以同时享受多个客户端请求,一旦链路建立成功,就将链路注册负责IO读写的sub reactor模型上。
3、Netty被广泛应用于异步通信领域
​作为一个异步的NIO框架,Netty全部IO都是异步非阻塞的,通过FutureListener机制,用户能够方便的主动获取,或者通过通知机制获得IO的操作结果。
三、Netty主要需要学习总纲
1、Netty的IO通信
     主要学习Java的BIO操作,伪异步IO通信,NIO通信,AIO通信,同时,对四种通信进行对比。
2、Netty的入门级学习
     主要学习原生NIO存在什么样的缺陷,有哪些不足的地方,Netty对比原生NIO存在什么样的优势 。
3、WebSocket的入门级学习
     主要学习什么是webSocket,webSocket建立链接的方式,webSocket的生命周期,webSocket是如何关闭的。
4、Netty实现WebSocket通信案例
     主要学习实现功能,开发服务端,客户端,测试程序
5、Netty学习总结
四、Netty学习前准备
 1、有一定的Java基础
       主要由Java开发的NIO开源框架。
 2、有一定的IO编程基础
 3、了解Java的BIO、伪异步IO、NIO和AIO
 
名词解释:
BIO:同步阻塞式IO,服务器端与客户端通过三次握手后建立连接,连接成功,双方通过I/O进行同步阻塞式通信。
弊端:1,读和写操作是同步阻塞的,任何一端出现网络性能问题,都会影响另一方。2,一个链路建立一个线程,无法满足高并发,高性能需求。
 
伪异步IO:为了解决同步阻塞式IO一个链路建立一个线程的弊端,出现了伪异步IO,伪异步IO其实就是通过线程池/队列来处理多个客户端的接入,通过线程池可以灵活的调配线程资源,设置线程最大值,防止海量并发接入导致线程耗尽。
弊端:1,读和写操作是同步阻塞的,任何一端出现网络性能问题,都会影响另一方
 
非阻塞IO:nio类库是jdk1.4中引入的,它弥补了同步阻塞IO的不足,它在Java提供了高速的,面向块的I/O。同步阻塞IO是以流的方式处理数据,而NIO是以块的方式处理数据。面向流的I/O通常比较慢, 按块处理数据比按(流式的)字节处理数据要快得多。
 
AIO:异步非阻塞I/O,NIO2的异步套接字通道时真正的异步非阻塞I/O,它对应unix网络驱动中的事件驱动I/O,它不需要通过多路复用器对注册的通道进行轮询操作即可实现异步读写,简化了NIO编程模型。
 
NIO:全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。
 
补充:
NIO有哪些框架?
Netty,Mina,Grizzly
为什么选择netty?
Netty 是业界最流行的NIO框架之一,它的健壮性,性能,可定制性,可扩展性在同类框架中都是屈指一数的,并且它已经得到很多商用项目的验证。
Netty优点有哪些?
API使用简单,开发门槛低。
功能强大,预置多种编解码器,支持多种主流协议。
定制能力强,可以通过channelhandler对通信框架进行灵活的扩展。
性能好。
社区活跃,版本迭代周期短。
经历了大规模的商业项目的验证。在互联网,大数据,网络游戏,企业应用,电信软件等众多行业得到成功商用,证明了它完全可以满足不同行业的商业应用。
 
 
 
 

Netty学习第一节Netty的总体概况的更多相关文章

  1. MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件

    MapServer Tutorial——MapServer7.2.1教程学习——第一节:MapServer的基本配置管理,静态地图应用以及MapFile文件 前言 万事开头难,有了<MapSer ...

  2. Netty学习笔记(三)——netty源码剖析

    1.Netty启动源码剖析 启动类: public class NettyNioServer { public static void main(String[] args) throws Excep ...

  3. OpenNebula学习第一节OpenNebula Front-end Installation

    一.说说情怀 随着公司硬件开发资源的不足,构建一个云平台似乎重要了起来.当然,也不是这个平台搭建的主力,出于工作的需求和个人兴趣爱好,接下来就来学习一下OpenNebula相关的东西,这是第一节课,先 ...

  4. VUE2.0实现购物车和地址选配功能学习第一节(来源--慕课网河畔一角)

    第一节  vue知识 vue-resource:和后台交互的一个插件,实现get.post和jsonp等功能.(替代jQuery) vue特点: 1.易用:通过创建vue实例,{{}}绑定数据十分方便 ...

  5. Netty学习第二节Java IO通信

    一.Java IO通信 名词解释: BIO通信:       采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端连接,在接收到客户端请求后,为每一个客户端建立一个新的线程负 ...

  6. Netty学习--第一章 JDK自带的BIO

    一.什么是BIO BIO是传统的通信技术,在BIO通信模型中,客户端发送请求给服务器,服务器每次都是会单独创建一个线程来监控客户端的请求,会为每个客户端创建一个线程来处理请求.当前服务器处理完成后,通 ...

  7. Netty学习笔记(二)——netty组件及其用法

    1.Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. 原生NIO存在的问题 1) NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector.Se ...

  8. Netty学习(三)-Netty重要接口讲解

    上一节我们写了一个HelloWorld,对于Netty的运行有了一定的了解,知道Netty是如何启动客户端和服务器端.这一节我们简要的讲解一下几个重要的接口,初步探讨Netty的运行机制,当然刚学Ne ...

  9. Netty学习(一)-为什么选择Netty

    前面我们简单学习了NIO.我们知道java的I/O模型一共有四种,分别是:传统的BIO,伪异步I/O,NIO和AIO.为了澄清概念和分清区别,我们还是先简单的介绍一下他们的概念,然后再去比较优劣.以及 ...

随机推荐

  1. bzoj4621: Tc605

    应要求写一下这个题的题解. 我的DP很奥(奇)妙(怪),不过跟标算还是殊途同归的(反正怎么做都行……) 先讲一下奥妙的性质吧. 首先,在最终序列中,每个数最多出现一段,并且,对于出现的数,每段数两两之 ...

  2. 解决session阻塞的问题

    简介 对于数据库运维人员来说创建session或者查询时产生问题是常规情况,下面介绍一种很有效且不借助第三方工具的方式来解决类似问题. 最近开始接触运维工作,所以自己总结一些方案便于不懂数据库的同事解 ...

  3. 计算webView的 高度 和自适应屏幕大小

    - (void)webViewDidFinishLoad:(UIWebView *)webView{ [webView stringByEvaluatingJavaScriptFromString: ...

  4. js switch表达式的例子

    switch 这种表达式在很多语言中都有,比如java, C等待, 使用switch比使用if else 来得方便,来得清晰.  前言 switch 这种表达式在很多语言中都有,比如java, C等待 ...

  5. flex——将Sprite控件添加到FLEX UI中

    在Flex的帮助文档里,有很多例子都是扩展Sprite类的.如果想把这些实例添加到你的s:Application中,如:addChild(DisplayObject ),肯定会出错.错误的大致意思是: ...

  6. 项目总结-timerTask的使用

    关于使用timerTask来进行定时任务的研究 业务说明:每天的0点执行一次 调用说明:com.hzmd.itest.db.ItestDbUtil中的startPermitTimer()方法进行最终的 ...

  7. python3使用selenium + Chrome基础操作代码

    selenium是Python的第三方库,使用前需要安装.但是如果你使用的是anaconda,就可以省略这个步骤,为啥?自带,任性. 安装命令: pip install selenium (一)使用s ...

  8. phpcms基础循环

    lists循环{pc:content action="lists" catid="2" order="id DESC" num=" ...

  9. 排错-lr回放错误Vuser&#160;failed&#160;to&#160;initialize&#160;extensi...解决方法

    lr回放错误:Vuser failed to initialize extension LrXml.dll解决方法   by:授客 QQ:1033553122 步骤1:找到LR安装位置,打开协议目录 ...

  10. Gtk 窗口,控件,设置(添加图片等)

    1.关于窗口   // 创建顶层窗体,后面有POPUP的 GtkWidget *main_window; main_window = gtk_window_new (GTK_WINDOW_TOPLEV ...