Netty 、Java NIO工作原理与简介

Netty 、Java NIO工作原理与简介

本质:JBoss做的一个Jar包
目的:快速开发高性能、高可靠性的网络服务器和客户端程序
优点:提供异步的、事件驱动的网络应用程序框架和工具
通俗的说:一个好使的处理Socket的东东

1.Netty是一种在Java NIO基础上实现的一种基于SocketChannel(TCP 网络IO)、ServerSocketChannel(TCP 网络IO)的一种Java NIO框架程序,方便快速开发高性能、高可靠性的网络服务器和客户端程序的。
2.说白了就是Java NIO的一种工作模式,不过进行了封装更方便使用的jar包。


Java NIO
1.NIO是一种应用级别的异步处理。
2.io方式是会使应用阻塞的,应用运行到那里就一直阻塞,直到得到结果返回为止,要实现多连接处理就必须要使用多线程(一个连接对应一个线程),但创建线程要消耗内存,影响性能。
3.NIO就是通过单线程或几个线程来完成很多的连接,减少创建大量线程的内存消耗。
4.NIO接收到连接时会连接变成一种模型(Channels),并注册到管理这种模型(Channels)的管理者(Selectors),当有数据与这个连接交互时,管理者(Selectors)就会通知模型(Channels),通过回调模型(Channels)定义好的处理函数或接口。
5.这样就可以在服务端实现一个线程处理多个连接的工作模式了。
6.NIO一般应用于连接是少量数据交互的情况下,如果连接是进行大量数据交互的就不适用于这种模式了(数据大会和回调占用时间长(影响交互响应性能))
7.NIO支持的Channels有很多:FileChannel(文件IO)、DatagramChannel(UDP 网络IO)、SocketChannel(TCP 网络IO)、ServerSocketChannel(TCP 网络IO)


Java NIO提供了与标准IO不同的IO工作方式:
1.Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
2.Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。
3.Selectors(选择器):Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。


Java NIO 由以下几个核心部分组成:Channels、Buffers、Selectors
Channel 和 Buffer
1.所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。

Selector
1.Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。
2.要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,


工作原理:
1.NIO就是应用层实现的一种基于事件通知的工作模式,应用层通过监听端口,当端口有数据到达时,系统会调用应用层的回调来通知应用。
2.应用在通知处理里面再实现对数据解析后将数据通知到注册在该应用里面的通知处理接口(就是回调)。
3.Selectors就是应用的回调函数(系统级的),Channels and Buffers是要往Selectors注册(当然也有它的回调(应用级的)),当Selectors接收到数据就轮询注册到里面的Channels,符合要求的就调用回调(应用级的)函数进行处理。


参考原文(Netty应用例子): http://lippeng.iteye.com/blog/1907279
参考原文(Netty应用例子): http://blog.csdn.net/kobejayandy/article/details/11493717
参考原文(Java NIO): http://www.iteye.com/magazines/132-Java-NIO
参考原文(java nio的使用示例): http://www.jb51.net/article/48520.htm
参考原文(java nio的使用示例): http://www.cnblogs.com/gaotianle/p/3325451.html

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2338507