Простой серверный модуль Apache - PullRequest
1 голос
/ 02 декабря 2011

Я создал простой серверный модуль Apache после примера модуля hello world, который я где-то нашел. Затем я добавил переменную, которая будет отслеживать количество посещений на моей странице. Вот мой код модуля:

/* The simplest HelloWorld module */
#include <httpd.h>
#include <http_protocol.h>
#include <http_config.h>

static int noOfViews = 0;

static int helloworld_handler(request_rec *r)
{
    noOfViews++;

    if (!r->handler || strcmp(r->handler, "helloworld")) {
        return DECLINED;
    }

    if (r->method_number != M_GET) {
        return HTTP_METHOD_NOT_ALLOWED;
    }

    ap_set_content_type(r, "text/html;charset=ascii");
    ap_rputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n",
             r);
    ap_rputs("<html><head><title>Apache HelloWorld "
             "Module</title></head>", r);
    ap_rputs("<body><h1>Hello World!</h1>", r);
    ap_rputs("<p>This is the Apache HelloWorld module!</p>", r);
    ap_rprintf(r, "<p>Views: %d</p>", noOfViews);
    ap_rputs("</body></html>", r);
    return OK;
}

static void helloworld_hooks(apr_pool_t *pool)
{
    ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
}

module AP_MODULE_DECLARE_DATA helloworld_module = {
    STANDARD20_MODULE_STUFF,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
            helloworld_hooks
};

Мой модуль в настоящее время испытывает 2 проблемы, которые я не могу выяснить.

  1. Кажется, что количество просмотров увеличилось в 2 раза, хотя я хочу, чтобы оно увеличивало единицу за раз.

  2. Когда я постоянно обновляю свою страницу, иногда мой номер случайно падает.

Кто-нибудь знает, каковы могут быть источники моих проблем?

Большое спасибо, ребята!

1 Ответ

2 голосов
/ 02 декабря 2011
  1. Вы увеличиваете свой счетчик для запросов, которые вы на самом деле не обрабатываете.

  2. Каждый рабочий процесс в Apache имеет свою собственную копию noOfViews,Это применяется независимо от того, используете ли вы prefork или рабочий MPM;это просто более выраженная проблема с префорком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...