TKeed之處理超時請求

2021-09-27 02:21:25 字數 1376 閱讀 9618

前面使用epoll_wait將就緒事件從核心讀取到使用者陣列裡之後,需要處理事件。其中包括對超時事件的處理。

tk_handle_expire_timers();

tk_pq_t tk_timer;//優先佇列是全域性變數

void tk_handle_expire_timers()

// 最早入佇列節點超時時間大於當前時間(未超時)結束超時檢查

if(timer_node->key > tk_current_msec)

// 出現了沒被刪但是超時的情況,呼叫handler處理

if(timer_node->handler)

int rc = tk_pq_delmin(&tk_timer);

free(timer_node);

}}int tk_pq_is_empty(tk_pq_t *tk_pq)

void *tk_pq_min(tk_pq_t *tk_pq)

typedef struct priority_queuetk_pq_t;

typedef struct tk_timer tk_timer_t;

// 函式指標,負責超時處理,tk_add_timer時指定處理函式

//定義了乙個新型別timer_handler_pt,這種型別指向了某種函式,這種函式傳入引數為:tk_http_request_t* request

//返回值型別為int

void tk_del_timer(tk_http_request_t* request)

優先佇列儲存時間結點。時間結點包含請求截止時間,是否被刪除,以及超時處理函式,還有請求結構體。只要優先佇列不為空,就不斷獲取優先佇列對頭結點,檢視惰性標記,已標記則釋放記憶體;未標記,則檢視時間是否超時,超時了,則呼叫超時處理函式,將該結構體的惰性標記置1,並將該節點放到優先佇列尾部。沒超時不做任何操作。

檢視該節點惰性標記是否為1,是則釋放該節點記憶體空間,返回;

檢視該節點是否超時,沒有超時,則什麼都不做,返回;

超時,則,對該節點進行惰性標記,且將該超時節點移至隊尾。

int tk_pq_delmin(tk_pq_t *tk_pq)

return 0;

}void exch(tk_pq_t *tk_pq, size_t i, size_t j)

int sink(tk_pq_t *tk_pq, size_t k)

return k;

}

將該節點與尾節點交換位置

對尾節點實行下溢操作,該操作會將該節點與兩個孩子節點中的較小者比較,與比它小則交換,否則終止交換。

Vue專案請求超時處理

現在網頁專案大多採用前後端分離模式,這種模式優點有很多,但是也會帶來不少問題,比如 請求後端介面時會受網路因素影響,導致請求超時 這就需要我們在請求方法中設定攔截,對請求超時做處理 下面就是我在專案中使用的axios封裝方法,設定網路請超時攔截處理 api 路徑 const httpaxios ax...

axios 請求超時處理方法

main.js import axios from axios axios.defaults.timeout 10000 設定超時時間,單位毫秒 axios.defaults.retry 3 設定全域性請求次數 axios.defaults.retrydelay 1000 設定全域性請求間隙 htt...

AJAX學習筆記之 處理多個非同步請求

首先來看乙個例項 9 5.html 9 5.aspx response.write request otext 執行效果 第乙個請求被覆蓋 出現這個問題是xmlhttp被作為乙個全域性變數而存在,第乙個請求未完成,已經被之後的請求所覆蓋。解決方法是將xmlhttp物件作為區域性變數來處理,並且在收到...