多路复用器

Netty序章之BIO NIO AIO演变

扶醉桌前 提交于 2020-01-26 08:31:57
netty是什么     Netty是一个基于Java NIO的client-server网络服务框架,人们可以利用netty快速地开发网络应用。同时netty相对于其他网络框架更加简单并且扩展性更强,这主要得益于其提供的简单易用的api将业务逻辑和网络处理代码解耦开来。能够使你更加专注于业务的实现而不需要太多关心网络底层实现。 Netty是一个提供异步事件驱动的网络应用框架,用以快速开发 高性能 、 高可靠 的网络服务器和客户端程序。Netty简化了网络程序的开发,是很多框架和公司都在使用的技术。更是面试的加分项。Netty并非横空出世,它是在BIO,NIO,AIO演变中的产物,是一种NIO框架。而BIO,NIO,AIO更是笔试中要考,面试中要问的技术。也是一个很好的加分项 流程图: 技术:BIO,NIO,AIO 说明:github上有更全的源码。 源码: https://github.com/ITDragonBl... BIO BIO 全称Block-IO 是一种 阻塞同步 的通信模式。我们常说的Stock IO 一般指的是BIO。是一个比较传统的通信方式, 模式简单 , 使用方便 。但 并发处理能力低 , 通信耗时 , 依赖网速 。 BIO 设计原理: 服务器通过一个Acceptor线程负责监听客户端请求和为每个客户端创建一个新的线程进行链路处理。典型的一请求一应答模式

Netty序章之BIO NIO AIO演变

喜夏-厌秋 提交于 2020-01-25 03:48:15
Netty序章之BIO NIO AIO演变 Netty是一个提供异步事件驱动的网络应用框架,用以快速开发 高性能 、 高可靠 的网络服务器和客户端程序。Netty简化了网络程序的开发,是很多框架和公司都在使用的技术。更是面试的加分项。Netty并非横空出世,它是在BIO,NIO,AIO演变中的产物,是一种NIO框架。而BIO,NIO,AIO更是笔试中要考,面试中要问的技术。也是一个很好的加分项,加分就是加工资,你还在等什么?本章带你细细品味三者的不同! 流程图: 技术:BIO,NIO,AIO 说明:github上有更全的源码。 源码:https://github.com/ITDragonBlog/daydayup/tree/master/Netty/socket-io BIO BIO 全称Block-IO 是一种 阻塞同步 的通信模式。我们常说的Stock IO 一般指的是BIO。是一个比较传统的通信方式, 模式简单 , 使用方便 。但 并发处理能力低 , 通信耗时 , 依赖网速 。 BIO 设计原理: 服务器通过一个Acceptor线程负责监听客户端请求和为每个客户端创建一个新的线程进行链路处理。典型的一请求一应答模式。若客户端数量增多,频繁地创建和销毁线程会给服务器打开很大的压力。后改良为用线程池的方式代替新增线程,被称为伪异步IO。 服务器提供IP地址和监听的端口

Java NIO Socket编程实例

五迷三道 提交于 2019-12-09 11:04:52
各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用线程都被阻塞,后续I/O都将在队列中排队 线程池采用阻塞队列实现,队列积满之后,后续入队列操作将被阻塞,新的客户端请求被拒绝,发生大量连接超时 NIO编程 缓冲区Buffer 每一种Java基本类型都有对一种缓冲区 大多数标准I/O使用ByteBuffer 通道Channel Channel分为两大类:用于网络读写的SelectableChannel和用于文件操作的FileChannel 多路复用器Selector 多路复用器提供选择已经就绪的任务的能力 NIO2.0 AIO 异步套接字通道不需要通过多路复用器(Selector)对注册的通道进行轮询操作即可实现异步读写 NIO实例分析 NIO服务端序列 步骤一:打开ServerSocketChannel,用于监听客户端的连接 步骤二:绑定监听端口,设置连接为非阻塞模式 步骤三:创建Reactor线程,创建多路复用器并启动线程 步骤四:将ServerSocketChannel注册到Reactor线程的多路复用器Selector上,监听ACCEPT事件 步骤五:多路复用器在线程run方法的无限循环体内轮休准备就绪的Key 步骤六

NIO编程

夙愿已清 提交于 2019-12-09 11:04:22
相关概念 缓冲区Buffer Buffer是一个对象,它包含一些要写入或者要读出的数据。在NIO库中,所有数据都是用缓冲区处理的。缓冲区实质上是一个数组,最常用的缓冲区是ByteBuffer。 通道 Channel 通道像一个自来水管一样,网络数据通过Channel读取和写入。其和流的区别是,流只能在一个方向上移动,而通道可以用于读、写或者二者同时进行。 多路复用器 Selector 多路复用器提供选择就绪的任务的能力。简单来说Selector会不断的轮询注册在其上的Channel。 NIO服务端时序图 打开ServerSocketChannel,用于监听客户端的连接,它是所有客户端连接的父通道。 绑定监听的端口,设置为非阻塞模式 创建Reactor线程,创建多路复用器并启动线程 将ServerSocketChannel注册到Reactor线程的多路复用器Selector上,监听ACCEPT事件 多路复用器在线程run方法的无限循环体内轮询准备就绪的Key 多路复用器监听到有新的客户端接入,处理新的接入请求,完成TCP三次握手,建立物理链路。 设置客户端链路为非阻塞模式。 将新接入的客户端连接注册到Reactor线程的多路复用器上,监听读操作,读取客户端发送的网络消息。 异步读取客户端请求消息到缓冲区 对ByteBuffer进行编解码,如果有半包消息指针reset