一、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. 1001-MySQL学习-第一节自习课

    MySQL学习(第一节自习课) 一. 软件下载.安装 下载地址:https://dev.mysql.com/downloads/installer/ 位置:mysql->installer-&g ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. AES 加密256位 错误 java.security.InvalidKeyException: Illegal key size or default parameters

    Java发布的运行环境包中的加解密有一定的限制.比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件. 官方网站提供了JCE无限制权限策略文件的下载: JDK8的下载地址: http:/ ...

  2. Gradle 语法

    参考文章: Gradle学习系列之二——创建Task的多种方法(http://www.cnblogs.com/CloudTeng/p/3417970.html) Gradle基本知识点与常用配置(ht ...

  3. app.$mount("#app") 手动挂载

    $mount()手动挂载 当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中: 假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载.例如: new Vue({ //el: ...

  4. Java可重入锁与不可重入锁

    可重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的. synchronized 和   ReentrantLock 都是可重入锁. 可重入 ...

  5. etcd 集群恢复

    七个节点,挂了5个,etcd无法访问 参考: https://coreos.com/etcd/docs/latest/op-guide/recovery.html 此次我只恢复了v3的数据 在存活的节 ...

  6. LinuxI/O 性能分析

    .I/O linux 命令: ostat 监视I/O子系统 iostat [参数][时间][次数] 通过iostat方便查看CPU.网卡.tty设备.磁盘.CD-ROM 等等设备的活动情况, 负载信息 ...

  7. Promise/Deferred

    [fydisk] 1.$.get('/api').success(onSuccess).error(onError).comlete(onComplete); 2.对同一事件加入多个Handler. ...

  8. e.g.-basic-Si

    ! Band structure of silicon. The points listed after plot1d below are the ! vertices joined in the b ...

  9. 【校招面试 之 C/C++】第6题 C++深拷贝与浅拷贝

    1.两个的区别(1)在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制.当数据成员中没有指针时,浅拷贝是可行的: 但当数据成员中有指针时,如果采用简单的浅 ...

  10. 关于weblogic报UnsatisfiedLinkError Native Library xxx.so already loaded

    一.场景 最近写的一个系统,在Tomcat测试完后说要改使用weblogic,于是在服务器上安装了weblogic,捣鼓了半天,一个个问题冒了出来,其中就有个比较麻烦的报错:UnsatisfiedLi ...