Redis網路庫原始碼分析 2 之啟動伺服器

2021-07-29 10:24:52 字數 1267 閱讀 2905

main函式定義在server.c中,它的內容如下:

int main()

現在我們去看下定義的server_t到底是什麼東東?

typedef struct server_t;

是乙個非常簡單的伺服器定義。最核心的是aeeventloop,它是整個事件迴圈的結構體,我們現在看看它裡面有什麼:

/* state of an event based program */

typedef

struct aeeventloop aeeventloop;

/* file event structure 事件結構體*/

typedef

struct aefileevent aefileevent;

/* time event structure 定時事件結構體*/

typedef

struct aetimeevent aetimeevent;

/* a fired event 發生了事件的結構體*/

typedef

struct aefiredevent aefiredevent;

基本上這個結構體就能表示我們伺服器在執行期間的資料結構了。

void init_server(server_t *server)

/*將 listen_fd 註冊到epoll的例項上,事件處理函式為accepttcphandler*/

if (aecreatefileevent(server->loop, server->listen_fd, ae_readable, accepttcphandler, server) != ae_err)

}

void wait_server(server_t *server)

void aemain(aeeventloop *eventloop)

aeprocessevents(eventloop, ae_all_events); //整個事件處理核心函式,實際上就再不斷輪詢這個函式

}}

至此,我們的伺服器算是啟動起來了,它目前完成的是將listen_fd註冊到了epoll的結構上,下次如果有連線請求我們就可以處理了。

Redis原始碼分析之unlock

override public void unlock if opstatus 第一步 發布解鎖訊息刪除key protected rfutureunlockinnerasync long threadid 呼叫lua指令碼,exists命令 若 key 存在返回 1 否則返回 0 publish ...

redis之string原始碼分析

string資料型別的物件編碼有兩種,分別是embstr和raw。兩種編碼的區別並不大,embstr相對於raw,記憶體空間連續。兩者的資料格式見下圖 redis的string資料之所以使用embstr和raw兩種編碼格式,是為了當乙個string物件的值比較小時,使用乙個連續的記憶體分割槽存放re...

Redis原始碼分析之SET流程

本篇分析redis 如何處理set指令 客戶端解析使用者輸入 構造指令 redisformatsdscommandar clisendcommand issuecommandrepeat repl 例如使用者輸入set abcd 2,則構造的指令就是 3 r n 3 r nset r n 4 r n...