redis分两种类型的事件:文件事件(file event)和时间事件(time event)
1、文件事件处理器,分为四个部分,套接字、I/O多路复用程序、文件事件分派器和事件处理器,IO多路利用程序和文件事件分派器中间,有一个队列,通过这个队列,可以有序的、同步、每次一个套接字的方式向文件事件分派器传送套接字
AIP:
src/ae.c:aeCreateFileEvent,将事件加入到IO多路复用程序监听范围
src/ae.c:aeDeleteFileEvent,取消在IO多路复用程序监听范围的事件
src/ae.c:aeGetFileEvents,获得在IO多路复用程序监听范围的事件
aeWait,在给定的时间内,等待给定类型事件产生
aeApiPoll,接受一个sys/time.sh/struct timeval结构为参数,在指定的时间内,等待所有被c:aeCreateFileEvent设置为监听状态的文件事件,当有事件发生时或超时,返回
aeProcessEvents,文件事件分派器,调用aeApiPoll,然后遍历所有已产生的事件,并执行对应的事件处理器来处理事件
aeGetApiName,返回io多路复用程序低层使用的函数库名称
2、文件处理器
1)连接应答处理器:src/networking.c:acceptTcpHandler
2)命令请求处理器:src/networking.c:readQueryFromClient
3)命令回复处理器:src/networking.c:sendReplyToClient
3、时间事件
1)定时事件(暂时没使用)
2)周期性事件
time_event:id(全局事件ID)+when(UNIX时间,时间事件到达时间)+timeProc(时间事件处理器)
src/ae.c:aeCreateTimeEvent,接受一个毫秒数和时间事件处理器proc,将新的时间事件添加到服务器
src/ae.c:aeDeleteTimeEvent,根据事件ID,删除时间事件
src/ae.c:processTimeEvents,处理时间事件
src/ae.aeProcessEvents,处理事件,包括文件事件和时间事件