上一篇讲完了initServer
的大体流程,其中aeCreateEventLoop()
,这个函数没有详细说明,我们在这一篇里讲述Ae.h和Ae.c
, 这里面的api阐述了如何创建
eventLoop
和添加文件读写事件等等。
ae.h中的解释
//文件读写事件回调函数typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);
//定时器回调函数typedef int aeTimeProc(struct aeEventLoop *eventLoop, long long id, void *clientData);
//事件结束回调函数,析构一些资源typedef void aeEventFinalizerProc(struct aeEventLoop *eventLoop, void *clientData);
//不是很清楚,应该是进程结束前做的回调函数typedef void aeBeforeSleepProc(struct aeEventLoop *eventLoop);
1 | //文件事件回调函数 |
/* Prototypes */
//创建eventLoop结构
aeEventLoop *aeCreateEventLoop(int setsize);
//删除eventloop
void aeDeleteEventLoop(aeEventLoop *eventLoop);
//事件派发停止
void aeStop(aeEventLoop *eventLoop);
//添加文件读写事件
int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask, aeFileProc *proc, void *clientData);
//删除文件读写事件
void aeDeleteFileEvent(aeEventLoop *eventLoop, int fd, int mask);
//获取文件事件对应类型(读或写)
int aeGetFileEvents(aeEventLoop *eventLoop, int fd);
//创建定时器事件
long long aeCreateTimeEvent(aeEventLoop *eventLoop, long long milliseconds,aeTimeProc *proc, void *clientData, aeEventFinalizerProc *finalizerProc);
//删除定时器事件
int aeDeleteTimeEvent(aeEventLoop *eventLoop, long long id);
//派发事件
int aeProcessEvents(aeEventLoop *eventLoop, int flags);
//等待millionseconds直到文件描述符可读或者可写
int aeWait(int fd, int mask, long long milliseconds);
//ae事件轮询主函数
void aeMain(aeEventLoop *eventLoop);
//获取当前网络模型
char *aeGetApiName(void);
//进程休眠前回调函数
void aeSetBeforeSleepProc(aeEventLoop *eventLoop, aeBeforeSleepProc *beforesleep);
//获取eventloop所有的事件个数
int aeGetSetSize(aeEventLoop *eventLoop);
//重新设置eventloop事件个数
int aeResizeSetSize(aeEventLoop *eventLoop, int setsize);
ae.cpp中,一个函数一个函数解析
1 | //定义了几个宏,根据不同的宏加载 |
aeCreateEventLoop,主要负责eventloop结构的创建和初始化,以及模型的初始化
1 | aeEventLoop *aeCreateEventLoop(int setsize) { |
1 | //事件队列大小和重置 |
删除eventloop和stop事件轮询
1 | //删除eventloop结构 |
创建监听事件
1 | //创建监听事件 |
删除监听事件
1 | void aeDeleteFileEvent(aeEventLoop *eventLoop, int fd, int mask) |
1 | //获取文件类型 |
事件派发函数
1 | //派发事件的函数 |
1 | /等待millionseconds,直到有可读或者可写事件触发 |
1 | //ae主函数 |
这就是ae文件里大体的几个api,其他的没理解的还在研究。