标签:全局 套件 api code reactor tor 复用 连接 服务端
Redis服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件(file event)和时间事件(time event)
aeMain
函数通过调用aeProcessEvents
函数来进行文件事件和时间事件的调度和执行。aeEventLoop
中记录了事件相关的信息。首先通过aeSearchNearestTimer
函数获取最短的时间事件的执行时间间隔n
,然后调用aeApiPoll
函数获取监听到的套接字,最后执行与套接字向对应的事件处理函数rfileProc
和wfileProc
,最后再执行时间事件函数processTimeEvents
Redis的基于Reactor模式开发了自己的网络事件处理器,这个处理器被称为文件事件处理器(file event handler):
Redis为文件事件编写了多个处理器:
AE_READABLE
事件关联起来,当有客户端用connect
函数连接服务器监听套接字是,套接字就会产生AE_READABLE
事件,引发连接应答处理器执行,并执行相应的套接字应答操作AE_READABLE
事件和命令请求处理器关联起来,当客户端向服务器发送命令请求时,套接字就会产生AE_READABLE
事件,引发命令请求处理器执行,并执行相应的套接字读入操作AE_WRITABLE
事件和命令回复处理器关联起来,当客户端准备好接收服务器传回的命令回复时,就会产生AE_WRITABLE
事件,引发命令回复处理器执行,并执行相应的套接字写入操作一次完整的客户端与服务端连接事件
AE_READABLE
事件,当客户端发送连接请求产生AE_READABLE
事件,服务端会对客户端的连接请求进行应答,将客户端套接字的AE_READABLE
事件与命令请求处理器关联,客户端可以向服务端发送命令请求了AE_READABLE
事件,引发命令处理器去执行,执行命令将产生相应的命令回复,服务端将客户端套接字的AE_WRITABLE
事件与命令回复处理器关联AE_WRITABLE
事件,触发命令回复处理器执行,当命令回复处理器将命令回复全部写入套接字之后,服务器就会接触客户端套接字的AE_WRITABLE
事件与命令回复处理器之间的关联Redis的时间事件分为定时事件和周期性事件。一个时间事件由三个属性组成:
id
:服务器为时间时间创建的全局唯一IDwhen
:记录了时间时间的到达时间(毫秒精度的UNIX时间戳)timeProc
:时间事件处理器服务器所有的时间事件都放在一个无序链表中,每当时间事件执行器运行时,它就遍历整个链表,查找所有已到达的时间事件,并调用相应的事件处理器。正常模式下的Redis服务器只使用serverCron
一个时间事件,而在benchmark模式下,服务器也只使用两个时间事件,所以不影响事件执行的性能
标签:全局 套件 api code reactor tor 复用 连接 服务端
原文地址:https://www.cnblogs.com/pinxiong/p/13288094.html