NIO简单理解(一,NIO服务端简单实现逻辑)

熟悉NIO,首先要理解NIO核心对象

ServerSocketChannel

Selector:是一个多路开关选择器,可以同时检查(如果需要,也可以等待)一组信道的I/O状态,能够管理多个信道上的I/O操作。

简单NIO服务端为例实现逻辑:

创建Selector(多路开关选择器或者通道管理器),

(干的事就是收集请求,分发任务)。

需要下列连个核心对象

ServerSocketChannel: 通信信道  

SelectionKey:对应信道上匹配并可以处理的哪种事件(包含四种枚举事件)

 Selector实例对象设置: (规定好要监听报告的事件,这个只监听新连接事件

1 开启一个服务端的信道:

       ServerSocketChannel ssc = ServerSocketChannel.open();

2 绑定socket端口ssc.socket().bind

3 注册绑定Selector 到信道,将Selector实例(Selector.open()获取)注册(register  1:n)到想要监控的信道上

serverSocketChannel.register(connectionBell.getSelector(), SelectionKey.OP_ACCEPT);    

(注意, 这要通过channel的方法实现,而不是使用selector的方法)

4 开启Selector监控连接专用线程(内部while(true)自旋)

 new Thread(connectionBell).start();

5 专用线程内部可以做的事:

服务端Selector实例内核轮询 获取信道事件,this.selector.select();该方法阻塞等待或者超时

通过信道事件找到对应信道,获取该信道及客户端请求信息

 ServerSocketChannel ssc = (ServerSocketChannel) key.channel();

开启多线程:dispatch分发处理请求


6  客户端NIO序列图  

   


7 服务端NIO序列图


猜你喜欢

转载自blog.csdn.net/icool_ali/article/details/77367252
今日推荐