1.netty基本概念

来源:互联网 发布:仙剑三mac版 编辑:程序博客网 时间:2024/06/05 23:54

一.Java NIO

1.java2002年引入了非阻塞IO,位于JDK1.4的java.nio包中

2.NIO相比BIO的好处:使用较少的线程就可以处理许多连接减少了cup切换和创建线程的开销,同时在没有读写操作的时候线程可以出去其他任务

3.Netty封装NIO的api,高负载下高效可靠地处理和调度IO是一件繁琐而且容易出错的任务,netty就处理了这些问题


二.Netty核心组件

Netty核心组件:
Channel:代表到一个实体(如硬件设备、文件、Socket等)的开放链接,可以翻译成通道是数据在双方之间传输的载体。能够被打开和被关闭、连接或者断开连接


回调:其实就是一个方法,一个回调被触发时,相关事件可以被一个interface-ChannelHandler的实现处理,主要是在操作完成后通知相关方


Future:提供了另一种在操作完成时通知应用程序的方式。这个对象可以看做是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对其结果的访问


事件和ChannelHandler:事件用来通知我们状态的改变或者操作的状态,使得我们可以基于已经发生的时间来触发适当的动作(记录日志、数据转换、流控制、应用程序逻辑)


Netty中可能由于如站数据或者相关状态改变而触发的事件包括:
连接已经被激活或者连接失活
数据读取
用户事件
错误事件
Netty中出站事件是未来将会触发的某个动作的操作结果,这些动作包括:
打开或者关闭到远程节点的连接
将数据写到或者冲刷到套接字



EventLoop:是一个线程驱动,处理一个channel 所有 IO事件,并且在这个EventLoop的整个生命周期都不会变。在netty内部将为每个Channel分配一个EventLoop,用来处理所有事件(注册感兴趣的事件,将事件派发给ChannelHandler,安排进一步动作)


三.linux的I/O模型简介

阻塞IO:

非阻塞IO:

IO复用:

信号驱动IO:

异步IO:

四.IO多路复用

将多个IO的阻塞复用到同一个select的阻塞上面使系统在单线程下可以同时处理多个客户端请求。
原创粉丝点击