Я только начинаю понимать, как работает сервер Apache, и на днях я столкнулся с проблемой при программировании очень простой веб-страницы с отображением количества обращений к странице:
/* 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)
{
if (!r->handler || strcmp(r->handler, "helloworld")) {
return DECLINED;
}
if (r->method_number != M_GET) {
return HTTP_METHOD_NOT_ALLOWED;
}
noOfViews++;
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
};
Что в основномслучалось, когда я обновлял страницу, счетчик посещений увеличивался, но иногда он случайно падал в количествеКто-то сказал мне, что это из-за того, как работает Apache Prefork MPM.Прочитав это:
http://httpd.apache.org/docs/2.0/mod/prefork.html
Я понимаю проблему больше, но я все еще не уверен на 100%, что происходит.Таким образом, prefork MPM создает несколько дочерних процессов, некоторые из которых бездействуют, и ожидает подключения клиентов, поэтому, когда я обновляю страницу, я на самом деле подключаюсь к группе различных дочерних процессов, запущенных сервером.Однако этот модуль имеет ограниченное количество дочерних процессов, которые он может поддерживать одновременно, поэтому иногда, когда он убивает процесс, мой счетчик отключается.Я не совсем уверен, правильно ли это объяснение или почему именно счетчик сбрасывается.
Весь совет приветствуется.