Netty之WebSocket和四种IO介绍
Netty简介
一、什么是netty?
高性能 事件驱动
异步非堵塞 基于NIO的客户端,服务器端编程框架
稳定性和伸缩性
二、Netty的使用场景
高性能领域
多线程并发领域
异步通信领域
四种IO介绍
1、BIO通信
(1)一个线程负责连接
(2)一个请求一个应答
(3)缺乏弹性伸缩能力 当客户端访问增大,线程造成进程宕机。不能对外服务。
2、伪异步IO通信
(1)线程池负责连接 当有新的客户端进来,将客户端的socket封装成Task投入线程池。
(2)m请求n应答 将所有的请求放到一个线程池中,由线程池来分配线程;做到异步通信。
(3)线程池阻塞 线程池可以设置最大访问数。并发不断增加,可能造成阻塞。
3、NIO通信
(1)缓冲区Buffer ————>>> 他是一个对象,包含读和写的数据,所有数据都是用缓冲区处理的。
(2)通道Channel ————>>> 他就像是一个自来水管一样,网络数据通过Channel读取或写入,通道与流的不同之处在于通道是双向的,流只是在一个水平线上移动,一个流他必须是inputStrem或outputStrem的子类,通道可以用于读写,或者二者同时进行。
(3)多路复用器Selector ————>>> 它会不断的轮询注册在其上的channel,如果channel发生读或写事件,那么这个channel就处于就绪状态,会被selector轮询出来,然后通过selectorKey获取就channel集合,进行后续的io操作。由于jdk使用epoll()替代传统的selector实现,所以他并没有最大连接句柄限制,也就意味着只需要一个负责轮询selector的线程就可以接入成千上万的channel.
4、AIO通信
(1)连接注册读写事件和回调函数
(2)读写方法异步
(3)主动通知程序
总结:AIO异步通道通过两种方式获得操作结果,第一种就是通过返java.util.concurrent.Futur对象,第二种方式是为操作提供一个回调参数java.nio.channels.CompletionHandler,这个回调类包含completed,failed两个方法。那么AIO的套接字通道是真正的异步非阻塞io,他不需要对注册的多路复用器进行轮询操作就能实现异步读写,简化了NIO模型,这就是AIO通信。
Netty的WebSocket通信实现
一、Netty实现WebScoket通信案例
(1)编写存储整个工程的全局配置类 ===》 这里需要有一个Channel对象来存储每一个接入进来的客户端 ===》 ChannelGroup对象 ===》为它赋值的是一个默认的ChannelGroup(DefaultChannelGroup)这里他需要一个GlobalEventExecutor.INSTANCE参数。
(2)编写WebSocket核心类。
这个类继承了SimpleChannelInboundHandler抽象类,同时这个抽象类又继承了ChannelHandlerAdapter类,然后重写ChannelHandlerAdapter类中的channelActive、channelInactive、channelReadComplete、exceptionCaught四个方法和该抽象类的messageReceived方法。在重写messageReceived方法时编写需要的业务处理方法和握手请求业务方法就行了。
(3)编写初化连接时的各个组件
这个类是继承了ChannelInitializer抽象类。重写默认的initChannel方法,调用传入的socketChannel对象通道,将各个组件写入该对象。
Netty之WebSocket和四种IO介绍的更多相关文章
- 【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency> <groupId>org.springframework.boot</gr ...
- mysql进阶(六)模糊查询的四种用法介绍
mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下. 下面介绍mysql中模糊查询的四种用法: 1 %: 表示任意0个或多个字符.可匹配任意类型 ...
- 四种IO模型
四种 IO 模型: 首先需要明确,IO发生在 用户进程 与 操作系统 之间.可以是客户端IO也可以是服务器端IO. 阻塞IO(blocking IO): 在linux中,默认情况下 ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- 【转载】小结一下linux 2.6内核的四种IO调度算法
在LINUX 2.6中,有四种关于IO的调度算法,下面综合小结一下: 1) NOOP NOOP算法的全写为No Operation.该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺 ...
- 快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示
在上一篇的最后,编写了一个C#驱动RabbitMQ的简单栗子,了解了C#驱动RabbitMQ的基本用法.本章介绍RabbitMQ的四种Exchange及各种Exchange的使用场景. 1 direc ...
- 图解四种 IO 模型
最近越来越认为,在讲解技术相关问题时,大白话固然很重要,通俗易懂,让人有想读下去的欲望.但几乎所有的事,都有两面性,在看到其带来好处时,不妨想想是否也引入了不好的地方. 例如在博客中,过于大白话的语言 ...
- Rational Rose的四种视图介绍
Rose模型中有四种视图:Use Case View(用例视图),Logical View(逻辑视图),Component View(组建视图)和Deployment View(配置视图). 用例视图 ...
- Java 四种引用介绍及使用场景
强引用-FinalReference 介绍: 强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式: String str = new String("s ...
随机推荐
- MySQL-left join _20160928
left join 左连接 返回from 后面表的全部记录和 left join 后面表和from 后面表条件相符的全部记录 一般格式为下面,首先table A 和tableB都有两个唯一的字段标识I ...
- bzoj3456城市规划 多项式取模
題目大意 求出有n个点的有标号简单连通无向图的数目. 题解 什么破玩意,直接输出\(2^{C_n^2}\)走人 我们发现这张图要求连通,而上式肯定不能保证连通. 其实上式表示的是不保证连通的有标号简单 ...
- 四 Vue学习 router学习
index.js: 按需加载组件: const login = r => require.ensure([], () => r(require('@/page/login')), 'log ...
- win10 设备摄像头,麦克风,【隐私】权限
win10 因为隐私问题, 把mic,摄像头, 定位功能关闭, 之后调用USB摄像头的时候,忘了这个, 接口API 一直返回调用失败,[不能创建视频捕捉过滤器 hr=0x80070005] => ...
- deprecated conversion from string constant to ‘char*’
deprecated conversion from string constant to ‘char*’ #include <iostream> using namespace std; ...
- Apress 出版社电子书
http://www.apress.com/ 国外收费电子书网站,电子书权威,比国内的还便宜
- repackage android application
decompile the application file apktool d -o dianping/ dianping.apk modify the resources / smali asse ...
- InnoSetup自动检测并安装.Net Framework
InnoSetup可在在脚本中插入[Code]代码段,其中的代码可以通过事件驱动,支持的主要事件如下: function InitializeSetup(): Boolean; ——安装程序初始化,返 ...
- FZU2030 括号问题(dp)
Problem 2030 括号问题 Accept: 398 Submit: 753Time Limit: 1000 mSec Memory Limit : 32768 KB Proble ...
- 附近wifi都是你的
今天给大家介绍deauth攻击. 最终效果:附近你指定的任何wifi,别人都无法连接,即便连接上的也会断掉. 由于我在 “世界虽大,但没有破不了的wifi” 这篇文章中写的很详细,所以我在这里就步详 ...