最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx中一個(gè)請(qǐng)求的count計(jì)數(shù)跟蹤淺析

 更新時(shí)間:2022年01月04日 10:37:04   作者:wwyyxx26  
這篇文章主要給大家介紹了關(guān)于nginx中一個(gè)請(qǐng)求的count計(jì)數(shù)跟蹤的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

首先說明一下應(yīng)用方式,有兩個(gè)nginx的模塊,一個(gè)名為jtxy,另一個(gè)名為jtcmd。一個(gè)http請(qǐng)求來了,會(huì)進(jìn)入jtxy的模塊處理,jtxy會(huì)創(chuàng)建出一個(gè)子請(qǐng)求發(fā)送給jtcmd,jtcmd里處理呢又會(huì)創(chuàng)建出一個(gè)upstream流到我們的上游非http服務(wù)A來處理,A處理完成后得到結(jié)果,會(huì)把結(jié)果返回給jtcmd的子請(qǐng)求,jtcmd的子請(qǐng)求把結(jié)果返回給jtxy。就是這樣一個(gè)流程,我們來跟蹤一下一個(gè)請(qǐng)的count計(jì)數(shù)。

1、請(qǐng)求到來,創(chuàng)建一個(gè)請(qǐng)求,ngx_http_alloc_request里count被初始化為1

此時(shí),count為1。

    r->main = r;
    r->count = 1;

2、jtxy模塊里處理請(qǐng)求時(shí),調(diào)用了ngx_http_subrequest來創(chuàng)建一個(gè)子請(qǐng)求,在ngx_http_subrequest里計(jì)數(shù)被加1。

此時(shí),count為2

    r->main->count++;

3、從一個(gè)模塊出去(這里就是jtxy模塊),會(huì)調(diào)用ngx_http_finalize_request,在ngx_http_finalize_request里會(huì)計(jì)數(shù)減一。

此時(shí),count為1。

    if (r->content_handler) {
        r->write_event_handler = ngx_http_request_empty_handler;
        ngx_http_finalize_request(r, r->content_handler(r));
        return NGX_OK;
    }

4、然后進(jìn)入了我們的子請(qǐng)求jtcmd模塊,,在這個(gè)模塊里,如果發(fā)現(xiàn)自己是個(gè)子請(qǐng)求((r!=r->main)),那么就應(yīng)該把主請(qǐng)求計(jì)數(shù)加一。這里標(biāo)紅強(qiáng)調(diào)這點(diǎn)是因?yàn)槿绻患?,那么主請(qǐng)求計(jì)數(shù)就會(huì)有問題,一會(huì)兒我們繼續(xù)跟蹤count的減1就會(huì)發(fā)現(xiàn)這個(gè)問題。

這里是jtxy發(fā)起的一個(gè)jtcmd子請(qǐng)求這里的r和r->main并不相同的,r是jtcmd,r->main就是jtxy。

此時(shí),count為2。

同時(shí)因?yàn)槲覀冏诱?qǐng)求jtcmd模塊里使用了upstream,那么count是還需要在加1,但是我們使用時(shí)是ngx_http_read_client_request_body(r, ngx_http_upstream_init),ngx_http_read_client_request_body里就已經(jīng)加1了,所以,我們這里就不必自己來做這個(gè)加1了。

此時(shí)count為3。

大家可以看看《深入理解nginx》的5.1.5節(jié)的內(nèi)容。對(duì)upstream流需要加1有講解。

所以呢,這里的count是加了2次的。

    r->upstream->resolved->sockaddr =  (struct sockaddr*)&backendSockAddr;
    r->upstream->resolved->socklen =  sizeof(struct sockaddr_in);
    r->upstream->resolved->naddrs = 1;
 
    r->upstream->create_request = jtcmd_upstream_create_request;
    r->upstream->process_header = jtcmd_upstream_process_header;
    r->upstream->finalize_request = jtcmd_upstream_finalize_request;
    r->upstream->abort_request = jtcmd_upstream_abort_request;
 
    r->upstream->input_filter_init = ngx_http_jtcmd_filter_init;
    r->upstream->input_filter = ngx_http_jtcmd_filter;
    r->upstream->input_filter_ctx = jtcmdctx;
    
    //r->subrequest_in_memory = 1;
    
    if(r!=r->main) 
    {
        r->main->count++;
    }
 
    ngx_int_t rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
    if (rc == NGX_ERROR || rc > NGX_OK) {
        return rc;
    }

這里的r是子請(qǐng)求,r->main是主請(qǐng)求。同時(shí)還注意到,子請(qǐng)求的count始終是0。

ngx_int_t
ngx_http_read_client_request_body(ngx_http_request_t *r,
    ngx_http_client_body_handler_pt post_handler)
{
    size_t                     preread;
    ssize_t                    size;
    ngx_int_t                  rc;
    ngx_buf_t                 *b;
    ngx_chain_t                out;
    ngx_http_request_body_t   *rb;
    ngx_http_core_loc_conf_t  *clcf;
 
    r->main->count++;

5、同第3一樣,請(qǐng)求的處理完后會(huì)調(diào)用ngx_http_finalize_request把計(jì)數(shù)減一,但是這里不同的是我們這里是一個(gè)子請(qǐng)求,他這里有一步r = r->main;所以實(shí)際減時(shí)就減到了主請(qǐng)求上去了,這個(gè)也是我們?cè)?里紅字說明的要加1的原因了。

此時(shí),count為2

static void
ngx_http_close_request(ngx_http_request_t *r, ngx_int_t rc)
{
    ngx_connection_t  *c;
 
    r = r->main;
    c = r->connection;
 
    ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
                   "http request count:%d blk:%d", r->count, r->blocked);
 
    if (r->count == 0) {
        ngx_log_error(NGX_LOG_ALERT, c->log, 0, "http request count is zero");
    }
 
    r->count--;

6、然后呢,因?yàn)樽诱?qǐng)求使用了upstream,因?yàn)檫@個(gè)原因count加了一次1,那么當(dāng)upstream結(jié)束,就要減一次1。

此時(shí)count為1。

 7、子請(qǐng)求完成后,父請(qǐng)求的回調(diào)方法接著處理,接下來就回到了主請(qǐng)求模塊jtxy里,這里在處理結(jié)束后就會(huì)調(diào)用ngx_http_finalize_request來結(jié)束掉這個(gè)請(qǐng)求了,此時(shí)count為1,請(qǐng)求就會(huì)被釋放掉了。

void
ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
{
    ngx_log_t                 *log;
    ngx_pool_t                *pool;
    struct linger              linger;
    ngx_http_cleanup_t        *cln;
    ngx_http_log_ctx_t        *ctx;
    ngx_http_core_loc_conf_t  *clcf;
 
    log = r->connection->log;
 
    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "http close request");
 
    if (r->pool == NULL) {
        ngx_log_error(NGX_LOG_ALERT, log, 0, "http request already closed");
        return;
    }

總結(jié)

到此這篇關(guān)于nginx中一個(gè)請(qǐng)求的count計(jì)數(shù)跟蹤的文章就介紹到這了,更多相關(guān)nginx請(qǐng)求的count計(jì)數(shù)跟蹤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx 流量控制/限流的具體實(shí)現(xiàn)示例

    Nginx 流量控制/限流的具體實(shí)現(xiàn)示例

    限流是一種流量控制手段,用于限制單位時(shí)間內(nèi)可以通過系統(tǒng)的請(qǐng)求數(shù)或連接數(shù),本文主要介紹了Nginx流量控制/限流的具體實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • Nginx搭建高可用的實(shí)現(xiàn)

    Nginx搭建高可用的實(shí)現(xiàn)

    高可用HA是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,本文主要介紹了Nginx搭建高可用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • nginx 訪問限制與訪問控制的實(shí)現(xiàn)

    nginx 訪問限制與訪問控制的實(shí)現(xiàn)

    訪問控制要做的事情是控制客戶端的資源訪問權(quán)限,本文主要介紹了nginx 訪問限制與訪問控制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Nginx中配置HTTP2協(xié)議的方法

    Nginx中配置HTTP2協(xié)議的方法

    HTTP2協(xié)議是HTTP的重大升級(jí),提供多路復(fù)用、頭部壓縮和服務(wù)器推送等優(yōu)點(diǎn),正確配置HTTP2可以為用戶提供更快、更流暢的訪問體驗(yàn),提升網(wǎng)站競(jìng)爭(zhēng)力,本文就來介紹一下Nginx中配置HTTP2協(xié)議的方法,感興趣的可以了解一下
    2024-10-10
  • nginx實(shí)現(xiàn)ip限流的具體示例

    nginx實(shí)現(xiàn)ip限流的具體示例

    限流的方式油很多種,本文主要介紹了nginx實(shí)現(xiàn)ip限流的具體示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • nginx請(qǐng)求限制配置方法

    nginx請(qǐng)求限制配置方法

    這篇文章給大家介紹nginx請(qǐng)求限制配置方法,包括http協(xié)議的連接和請(qǐng)求,nginx配置語法,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-07-07
  • nginx內(nèi)存池源碼解析

    nginx內(nèi)存池源碼解析

    內(nèi)存池是在真正使用內(nèi)存之前,預(yù)先申請(qǐng)分配一定數(shù)量的、大小相等(一般情況下)的內(nèi)存塊留作備用,接下來通過本文給大家介紹nginx內(nèi)存池源碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-11-11
  • Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn)

    Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn)

    本文主要介紹了Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺析nginx剛剛發(fā)布的JavaScript能力nginScript

    淺析nginx剛剛發(fā)布的JavaScript能力nginScript

    Nginx [engine x]是全球最受歡迎,也是最優(yōu)秀的web服務(wù)器、反向代理服務(wù)器。nginScript是JavaScript/ECMAscript的子集,nginScript不是通過V8引擎實(shí)現(xiàn)的。本文給大家介紹nginx剛剛發(fā)布的JavaScript能力nginScript,感興趣的朋友跟著小編一起了解了解吧
    2015-09-09
  • Nginx反向代理后端服務(wù)的操作步驟

    Nginx反向代理后端服務(wù)的操作步驟

    反向代理是一種代理服務(wù)器,位于客戶端與服務(wù)器之間,后端服務(wù)器處理請(qǐng)求后將響應(yīng)發(fā)送回反向代理服務(wù)器,反向代理服務(wù)器再將響應(yīng)返回給客戶端,本文將詳細(xì)介紹Nginx如何反向代理后端服務(wù),涵蓋其基本概念、配置方法、負(fù)載均衡、SSL/TLS支持等多個(gè)方面,需要的朋友可以參考下
    2024-06-06

最新評(píng)論

观塘区| 荔波县| 佳木斯市| 枣阳市| 上饶市| 阜平县| 丹巴县| 和林格尔县| 无棣县| 彭阳县| 威海市| 永靖县| 宜阳县| 仲巴县| 汤原县| 汉川市| 贺州市| 德江县| 洛南县| 南京市| 咸宁市| 太康县| 临潭县| 阿克陶县| 望城县| 阳朔县| 临夏市| 岢岚县| 河北区| 高阳县| 张北县| 鸡东县| 石台县| 万宁市| 荣成市| 莒南县| 东海县| 新巴尔虎右旗| 韶山市| 宁安市| 云林县|