【问题标题】:Get number of connections in Apache C-Module获取 Apache C-Module 中的连接数
【发布时间】:2015-04-30 08:45:20
【问题描述】:

如何获取打开的连接数(尝试访问服务器的不同浏览器的数量)。 我试图查看每个函数处理程序中可用的结构request_rec
request_rec->connection->conn_config 听起来是最相关的字段(类型为ap_conf_vector_t,但我不知道如何从中获取信息。

谢谢!

【问题讨论】:

    标签: c apache webserver apache-modules


    【解决方案1】:

    没有专门的计数器。

    你应该遍历所有 apache 的进程并计算它们,这取决于它的状态,比如mod_status do:

    int server_limit, thread_limit;
    int j, i, res;
    int ready;
    int busy;
    worker_score *ws_record = apr_palloc(r->pool, sizeof *ws_record);
    process_score *ps_record;
    
    ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
    ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
    
    ready = 0;
    busy = 0;
    
    for (i = 0; i < server_limit; ++i) {
        ps_record = ap_get_scoreboard_process(i);
        for (j = 0; j < thread_limit; ++j) {
            ap_copy_scoreboard_worker(ws_record, i, j);
            res = ws_record->status;
    
            if (!ps_record->quiescing
                && ps_record->pid) {
                if (res == SERVER_READY &&
                    ps_record->generation == ap_my_generation)
                    ready++;
                else if (res != SERVER_DEAD &&
                         res != SERVER_STARTING &&
                         res != SERVER_IDLE_KILL)
                    busy++;
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答,但我看到该解决方案只会增加计数器,因此不会反映真实状态..
    • 是的,此代码仅在调用时才计算进程。如果需要维护一个带有计数器的动态更新表,应该有更复杂的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2015-02-03
    相关资源
    最近更新 更多