由于已经在processOn上画好了图以及注释了解析,那么我就直接上图好了,由于画得有点大,有些文字截不了,那么我就直接将文字ctrl +C 、Ctrl+V 到这里来好了。
每一次连接都需要三个socket:
①serverSocketChannel:用于接收客户端的连接
②客户端的socketChannel:用于通讯服务端的连接
③服务端接收到客户端连接时所创建的socketChannel:用于通讯客户端的连接
当socketChannel在使用缓冲区byteBuffer的时候,要注意:
①read方法相当于是对byteBuffer的写入—即put
②write方法相当于是对byteBuffer的读取—即get
所涉及的集合
all-keys集合 —— 当前所有向Selector注册的SelectionKey的集合,Selector的keys()方法返回该集合
selected-keys集合 —— 相关事件已经被Selector捕获的SelectionKey的集合,Selector的selectedKeys()方法返回该集合
cancelled-keys集合 —— 已经被取消的SelectionKey的集合,Selector没有提供访问这种集合的方法
NIO的出现就是为了解决BIO阻塞的问题,所以也是会有单线程和多线程。
单线程的时候
多线程的时候
版权声明:本文为gwokgwok137原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。