作者:路路

热爱技术、乐于分享的技术人,目前主要从事数据库相关技术的研究。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

前言

在前两篇文章中,主要讲了网络 IO 的基础知识,以及 DBLE 网络模块的源码分析,本篇作为 DBLE 网络模块源码解析的第三篇,也是最后一篇,主要对 DBLE 网络模块知识作个简单概括及总结。

DBLE 网络模块主要涉及类图

我们先来看下网络模块涉及到的主要类图:

DBLE 网络模块涉及到的主要类图如上图所示,它们的主要功能总结如下:

  1. NIOAcceptor:负责接受客户端连接请求;
  2. NIOReactorPool:负责创建及获取 NIOReactor 对象;
  3. NIOReactor:主要通过内部类 RW 来处理连接的读写事件,内部类 RW 中使用 Selector 实现 IO 多路复用,即能够处理多个连接的读写事件;
  4. FrontendConnectionFactory:负责创建前端连接;
  5. FrontendConnection:前端连接类;
  6. SocketWR:负责单个连接的读写操作。

简单来讲,就是 NIOAcceptor 负责接收客户端连接请求,然后创建前端连接 FrontendConnectionNIOReactor 则负责监听前端连接的读写事件,如果有读写事件发生,则交给 SocketWR 进行实际网络 IO 数据的读取,读取到数据后续自然就是进行处理了。整个网络 IO 读写流程大概如此。

DBLE 网络模块概括及总结

对于中间件来讲,网络 IO 处理既是关键点,同时也是难点,高性能网络 IO 处理远比想象中的难。

DBLE 的网络 IO 模块是通过原生 JDK 纯手写的,抛开使用网络 IO 框架,更能够让我们看到网络 IO 处理的真实的、底层的过程。当然并不是说网络 IO 框架不好,了解了网络 IO 的底层原理,再看任何网络 IO 框架,你都能知其所以然,这比你单纯的会用框架,肯定是不一样的。

本系列文章总共有三篇,一篇原理介绍,一篇源码解析,最后一篇概括总结,通过本系列文章,希望不光光帮助大家了解到 DBLE 的网络处理逻辑,更能够帮助大家了解更一般的网络 IO 知识,后者对大家的工作帮助肯定更大,最后希望大家能够有所收获。