ngx_event_expire_timers
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                ngx_event_expire_timers
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                Nginx 中處理檢查超時的定時器并處理
//從ngx_event_timer_rbtree(定時器的紅黑樹中取出所有超時的定時器時間,并使用設(shè)定的handler處理該事件) void ngx_event_expire_timers(void) { ngx_event_t *ev;ngx_rbtree_node_t *node, *root, *sentinel; //哨兵(用于樹的邊界標(biāo)識)sentinel = ngx_event_timer_rbtree.sentinel;for ( ;; ) {//獲取rb數(shù)的根節(jié)點| root = ngx_event_timer_rbtree.root;//rb數(shù)為空,直接返回| if (root == sentinel) {| | return;| }//獲取rb數(shù)中最小時間節(jié)點,定時器| node = ngx_rbtree_min(root, sentinel);| /* node->key > ngx_current_msec *///判斷取出的定時器節(jié)點時間是否已經(jīng)超時| if ((ngx_msec_int_t) (node->key - ngx_current_msec) > 0) {| | return;| }//通過定時器節(jié)點取出與其相關(guān)關(guān)聯(lián)的對象結(jié)構(gòu)| ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));| ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,| | | | | "event timer del: %d: %M",| | | | | ngx_event_ident(ev->data), ev->timer.key);//在rb數(shù)中刪除該定時器節(jié)點 | ngx_rbtree_delete(&ngx_event_timer_rbtree, &ev->timer);#if (NGX_DEBUG)| ev->timer.left = NULL;| ev->timer.right = NULL;| ev->timer.parent = NULL; #endif| ev->timer_set = 0;| ev->timedout = 1;//使用綁定好的handler處理該超時時間| ev->handler(ev);} }--------------------- 本文來自 李艷坤 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/litianze99/article/details/81329376?utm_source=copy
總結(jié)
以上是生活随笔為你收集整理的ngx_event_expire_timers的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: perl中q,qq,qw,qr的区别。
 - 下一篇: Nginx的定时事件的实现(timer)