Netty-NIO编程

Netty-NIO编程

Tags: Netty

摘要

NIO Non-block IO 非阻塞IO。NIO提供SocketChannel和ServerSocketChannel两种不同的套接字实现。这两种通道都支持阻塞和非阻塞两种模式。一般来说,低负载,低并发的应用程序可以选择同步IO以降低编程复杂度,但是对于高负载,高并发的网络应用需要使用NIO的非阻塞模式进行开发。

NIO类库

NIO弥补了原来同步阻塞IO的不足,它在标准Java代码中提供了高速的、面向块的IO。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO不用使用本机代码就可以利用低级优化,这是原来的IO包无法做到的。

缓冲区Buffer

每一种Java基本类型都对应一种缓冲区,ByteBuffer,CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer.

通道Channel

Channel是一个通道,可以通过它读取和写入数据,它就像自来水管一样,网络数据通过Channel读取和写入。通道与流的不同之处在于通道是双向的,流只是在一个方向上移动。
Channel可以分为两大类:SelectableChannel网络读写和FileChannel文件操作。
ServerSocketChannel和SocketChannel都是SelectableChannel的子类。

多路复用Selector

多路复用Selector是java NIO编程的基础。
Selector会不断轮询注册在其上的Channel,获取处于就绪状态的Channel,然后执行后续的IO操作。
jdk使用了epoll()实现Selector。只需要一个线程负责Selector的轮询,就可以接入成千上万的客户端。

源码地址

https://coding.net/u/javacore/p/nio_programming/git