一、系统内核设计框架图
图示为一个简单的引擎设计草图,最顶层为用户应用开发层,是整个服务引擎的唯一对外接口(直接开放给用户层,由用户层自定义开发),整套服务引擎的设计理念是采用事件驱动模式,本篇主要从该框架图入手简要介绍我所设计的后台服务引擎,后续篇章中我会对每个环节进行详细介绍。
该套引擎在我的程序中被称为IApplication,它包括系统日志接口,定时器接口,session管理器,虚拟服务器列表管理,当前虚拟虚拟目录等。
系统的设计约定如下:
底层系统只关心底层的设计和开发,系统底层的安全由底层自己负责,但是用户层在开发自定义应用的时候,必须接受底层给出的约定,这些技术约定会在后期的开放接口中给与说明,用户层自己的安全由用户层自己负责,底层不做考虑。
事件驱动模型设计:
内核层系统驱动采用iocp(windows平台下完成端口)来实现,由事件驱动概念引申出的io驱动以及定时器驱动都是基于该机制上实现。
Io模型设计:
Io的读写事件有io驱动层来完成,图中将io句柄单独拎出来考虑,主要是因为考虑到以下几点:
Io多样性(TCP、udp、文件io、管道等)。
扩展性。
灵活性,支持多样性io,内核以及用户层不用关心io的实现,仅仅需要关心io能实现的功能,并且能够根据实际需求选择不用io模型。
会话机制:
会话是服务器端用来标识客户端根服务器之间的联系,每一个客户端可以跟服务器之间同时进行多个通话如果有必要。
定时器:
每个虚拟器都有自己的一套定时器驱动,由内核实现,用户层可见,并可按照约定使用定时器
二、用户层开发接口
class IGooInterface
{
public:
virtual ~IGooInterface(){};
/*
* 函数名称: Init
* 函数功能: 初始化
* 参数: application
* 初始化成功返回true,否则返回false
*/
virtual bool Init(IApplication& application) = 0;
/*
* 函数名称: Uninit
* 函数功能: 销毁
* 参数: application
* 初始化成功返回true,否则返回false
* 注意销毁时主程序忽略该函数返回,返回值留待扩展测试使用
*/
virtual bool Uninit(IApplication& application) = 0;
public:
/*
* 函数名称: OnTimer
* 函数功能: 定时器回调函数
* 参数: application
* 参数[handle]: 当前定时器句柄,注意定时器触发时,已经从定时器队列中移出了,用户无需使用该句柄从定时器中再次移出