首頁  >  文章  >  後端開發  >  Nginx 定時器

Nginx 定時器

WBOY
WBOY原創
2016-08-08 09:19:321435瀏覽

Nginx 定時器

Nginx 對時間的管理

      Nginx為了提高速度,自己實現了對時間的管理,設計了資料結構和一些變量,儲存在記憶體中。每一個行程都會單獨地管理目前的時間。

ngx_time_t

<code><span>typedef</span><span>struct</span> {
    <span>//格林威治时间1970年1月1日凌晨0点0分0秒到当前时间的秒数</span>
    time_t          sec;

    <span>//sec成员只能精确到秒,msec则是当前时间相对sec的毫秒偏移量</span>
    ngx_uint_t  msec;

    <span>//时区</span>
    ngx_int_t       gmtoff;
}   ngx_time_t;</code>

ngx_tm_t

<code><span>struct</span> tm {
    <span>int</span> tm_sec; <span>/* 秒–取值区间为[0,59] */</span><span>int</span> tm_min; <span>/* 分 - 取值区间为[0,59] */</span><span>int</span> tm_hour; <span>/* 时 - 取值区间为[0,23] */</span><span>int</span> tm_mday; <span>/* 一个月中的日期 - 取值区间为[1,31] */</span><span>int</span> tm_mon; <span>/* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */</span><span>int</span> tm_year; <span>/* 年份,其值从1900开始 */</span><span>int</span> tm_wday; <span>/* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */</span><span>int</span> tm_yday;    <span>/* 从每年的1月1日开始的天数 - 取值区间为[0,365],其中0代表1月1日,1代表1月2日,一次类推 */</span><span>int</span>  tm_isdst;  <span>/* 夏令时标识符。在实行夏令时的时候,tm_isdst为正;不实行夏令时的时候tm_isdst为0;否则为负 */</span>
};

typedef <span>struct</span> tm   ngx_tm_t;

<span>#<span>define</span> ngx_tm_sec            tm_sec</span><span>#<span>define</span> ngx_tm_min            tm_min</span><span>#<span>define</span> ngx_tm_hour           tm_hour</span><span>#<span>define</span> ngx_tm_mday           tm_mday</span><span>#<span>define</span> ngx_tm_mon            tm_mon</span><span>#<span>define</span> ngx_tm_year           tm_year</span><span>#<span>define</span> ngx_tm_wday           tm_wday</span><span>#<span>define</span> ngx_tm_isdst          tm_isdst</span></code>

      從上面的定義可以看出,ngx_tm_t和struct tm結構是一模一樣的。

Nginx快取時間的操作函數

_ void ngx_time_update(void)使用gettimeofday呼叫以系統時間更新快取的時間u_char *ngx_http_time(u_charbufhf,time)秒數),buf是轉換為HTTP時間後用來存放字串的記憶體將t轉換為「Mon,28 Sep 1970 06:00:00 GMT」形式u_char *ngx_http_cookie_time(u_charbuf time_t t)同上t是需要轉換的時間(距離格林威治時間的秒數),buf是轉換為HTTP時間後用來存放字串的記憶體_void ngx_gmngtime(time_t,,, *tptime_t ngx_next_time(time_t when)      計時器的結構是一棵紅黑樹。 ,最左下角的節點就是最有可能超時的事件。 );日誌物件初始化定時器ngx_msec_t ngx_event_find_timer(void);紅黑樹最左下角的節點,如果它比當前時間的大緒超時時間”;否則返回0,表示已經有事件準備就緒
函數名稱 參數意義 執行意義
將t填充ngx_tm_t
when表示期待過期的時間,僅表示一天內秒數到當前時間後並未超時,那麼返回這個到格林威治時間的秒數;2、如果超時,那麼返回次日同一刻間到格林威治時間的秒數 define ngx_time() ngx_cache_time- >sec
取得格林威治時間到目前時間的秒數 define ngx_timeofday() (ngx_time_t *)ngx_cached_time

void ngx_event_expire_timers(void);

檢查紅黑樹中的所有事件,調用所有準備就緒事件的handler回調函數

static ngx_inline void ngx_event_del_timer(ngx_event_t *ev);ev是需要操作的事件從定時器中刪除一個事件_ng_mx_xeventm_ngx_ timer單位是毫秒,它告訴定時器事件ev希望timer毫秒後超時版權聲明:Pain is justust in your mind.
添加定時器事件,超時時間為timer毫秒
以上就介紹了Nginx 定時器,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn