這個函數快到尾聲了,一氣呵成! redis
if(aeCreateTimeEvent(server.el, 1, serverCron, NULL, NULL) == AE_ERR)這個函數是建立時間事件。 api
這樣的話,server->el的timeEventHead就連接了一個成員以下: 服務器
/* typedef struct aeTimeEvent {
long long id; / time event identifier.
// 0
long when_sec; / seconds /
// 2013-10-18
long when_ms; / milliseconds /
// 00:28. 實際上是比當前時間多一毫秒
aeTimeProc *timeProc;
//serverCron
aeEventFinalizerProc *finalizerProc;
//NULL
void *clientData;
//null
struct aeTimeEvent *next;
} aeTimeEvent;
*/ app
~~~~~~~~~~~~~~~~~~~~ socket
下面是依次循環執行aeCreateFileEvent函數 ide
這個函數調用了aeApiAddEvent,這個函數主要關注: 函數
if (epoll_ctl(state->epfd,op,fd,&ee) == -1) return -1;這個函數執行完,server->el->apidata的epfd就有了各個server socket handle, 線程
顯而後面會經過epoll_wait來監聽事件。 server
再回到 aeCreateFileEvent 事件
fe->mask |= mask;//設置readable標誌
if (mask & AE_READABLE) fe->rfileProc = proc;//設置讀的操做函數
if (mask & AE_WRITABLE) fe->wfileProc = proc;//這個不會執行
if (server.sofd > 0 && aeCreateFileEvent(server.el,server.sofd,AE_READABLE,
acceptUnixHandler,NULL) == AE_ERR) redisPanic("Unrecoverable error creating server.sofd file event.");//這個不執行
/* Open the AOF file if needed. */
if (server.aof_state == REDIS_AOF_ON)
{
server.aof_fd = open(server.aof_filename,
O_WRONLY|O_APPEND|O_CREAT,0644);
if (server.aof_fd == -1)
{
redisLog(REDIS_WARNING, "Can't open the append-only file: %s",
strerror(errno));
exit(1);
}
}
//根據須要決定是否打開文件
if (server.arch_bits == 32 && server.maxmemory == 0)
而後還剩下最後四個函數:
第一個函數:replicationScriptCacheInit();簡單
第二個函數:scriptingInit();//這個是初始化LUA腳本,這個暫且忽略,後面在說明。
第三個函數: slowlogInit();簡單,不解釋。
第四個函數:bioInit();啓動2個線程,暫時不研究,後續研究。
好累啊,去洗澡了,困!
PS:最近幾天中斷研究Redis,因項目須要,我須要花一個禮拜來研究Live555多媒體服務器,敬請關注。