Java-彻底弄懂netty-程序员应该了解下Nio非阻塞服务器-知识铺

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

一、非阻塞IO通道

非阻塞IO通道是处理非阻塞IO操作的必选技术点。

如:非阻塞方式读取和写入IO

1.1 Channel 是通道,不储存数据

1.2 Selector 监听channel激活状态,选择处理单元

1.3 处理单元可以丢到一个线程中进行处理,有效利用线程。每个输入Channel并不是时时刻刻都有数据上报到服务端,Selector只监听有效的channel,丢入到处理单元进行处理。

1.4 输入channel 和 输出channel 操作同一块buffer。

二、基本非阻塞IO通道架构设计

   非阻塞IO通道可以使用单个线程来读取来自多个通道的数据。

   设计处理通道设置成:非阻塞模式。

   在非阻塞模式下,当尝试从中读取数据时,通道可能返回0或更多字节。

   如果通道没有要读取的数据,则返回0字节。当通道实际上有一些要读取的数据时,返回大于1个字节。

   为了避免检查要读取0字节的通道,我们使用Java NIO Selector 选择器。

   SelectableChannel可以使用注册一个或多个实例Selector。

   当你调用select()或调用selectNow()时,Selector它只给你SelectableChannel实际有数据读取的对象。

   如下图:

三、实战环节

基于上图还可以把接收客户端连接放到接收线程中,selector选择处理模块,放入到处理线程中处理。

大致架构图:

3.1 接收客户端线程  SocketAccepter.java

3.2 处理线程 SocketProcessor.java

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190813A0SIJD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券