Главная  /  Правка версии 2  /  Правка версии 3  /   /  Область пользователей

Отличия "Цикл обработки событий" вер. 2 сравн. вер. 3

Содержимое:

## Цикл обработки событий и взаимодействие с потоковым пулом
У сервиса CppCMS простая конструкция одного цикла обработки событий и потокового пула, обрабатывающего фактические отклики приложения пользователя
Каждый новый входящий запрос FastCGI, SCGI или HTTP принимается сервисом CppCMS и обрабатываются быстрым и эффективным циклом обработки событий CppCMS , базирующимся на системных вызовах `epoll`, `kqueue`, `/dev/poll` или `select`.
При входящем запросе, создается специальный HTTP-контекст.
Он подготавливает входящий запрос, считывает все POST-данные и
парсит его, при необходимости, в центральном цикле обработки событий.
Как только запрос будет готов, он проверяется пулом приложений CppCMS, чтобы определить, какие объекты приложения будут его обрабатывать.
Если приложение обработки синхронное - его выполнение передается в _потоковый пул_. Пользовательское приложение подготавливает ответ, посылает его синхронно клиенту и контекст уничтожается, завершая цикл "requst/response".
Если приложение асинхронное - HTTP-контекст остается внутри потока цикла обработки событий и обрабатывается асинхронным приложением. Это приложение
может решить немедленно завершить ответ или отложить его выполнение, например, в случае long polling.
## Интеграция с циклом обработки событий CppCMS
Есть несколько способов взаимодействия с циклом обработки событий, кроме очевидного - реализации собственного асинхронного приложения:
1. Использовать функцию `cppcms::service::get_io_service()`, для прямого доступа к циклу обработки событий.
Здесь можно использовать любые классы [`booster::aio`](/cppcms_ref_v0_99/namespacebooster_1_1aio.html) и обрабатывать различные асинхронные события.
2. Можно "постить" различные операции для выполнения в цикле обработки событий используя `cppcms::service::post()` из других потоков.
Это особенно важно, когда хотите
сделать интеграцию между синхронными и асинхронными
приложениями.
Вы должны помнить, что большинство объектов CppCMS,
включая `http::context` - не являются потокобезопасными
для доступа из нескольких потоков, поэтому
если какая-то операция должна быть выполнена над
объектами, работающими в цикле обработки событий, это должно
быть сделано "постингом" обработчиков для выполнения
в цикле обработки событий.
Важно помнить, что
каждая операция выполняющаяся в цикле обработки событий
## Цикл обработки событий и взаимодействие с потоковым пулом
У сервиса CppCMS простая конструкция одного цикла обработки событий и потокового пула, обрабатывающего фактические отклики приложения пользователя
Каждый новый входящий запрос FastCGI, SCGI или HTTP принимается сервисом CppCMS и обрабатываются быстрым и эффективным циклом обработки событий CppCMS , базирующимся на системных вызовах `epoll`, `kqueue`, `/dev/poll` или `select`.
При входящем запросе, создается специальный HTTP-контекст.
Он подготавливает входящий запрос, считывает все POST-данные и
парсит его, при необходимости, в центральном цикле обработки событий.
Как только запрос будет готов, он проверяется пулом приложений CppCMS, чтобы определить, какие объекты приложения будут его обрабатывать.
Если приложение обработки синхронное - его выполнение передается в _потоковый пул_. Пользовательское приложение подготавливает ответ, посылает его синхронно клиенту и контекст уничтожается, завершая цикл "request/response".
Если приложение асинхронное - HTTP-контекст остается внутри потока цикла обработки событий и обрабатывается асинхронным приложением. Это приложение
может решить немедленно завершить ответ или отложить его выполнение, например, в случае long polling.
## Интеграция с циклом обработки событий CppCMS
Есть несколько способов взаимодействия с циклом обработки событий, кроме очевидного - реализации собственного асинхронного приложения:
1. Использовать функцию `cppcms::service::get_io_service()`, для прямого доступа к циклу обработки событий.
Здесь можно использовать любые классы [`booster::aio`](/cppcms_ref_v0_99/namespacebooster_1_1aio.html) и обрабатывать различные асинхронные события.
2. Можно "постить" различные операции для выполнения в цикле обработки событий используя `cppcms::service::post()` из других потоков.
Это особенно важно, когда хотите
сделать интеграцию между синхронными и асинхронными
приложениями.
Вы должны помнить, что большинство объектов CppCMS,
включая `http::context` - не являются потокобезопасными
для доступа из нескольких потоков, поэтому
если какая-то операция должна быть выполнена над
объектами, работающими в цикле обработки событий, это должно
быть сделано "постингом" обработчиков для выполнения
в цикле обработки событий.
Важно помнить, что
каждая операция выполняющаяся в цикле обработки событий
должна быть _очень быстрой_ и _никогда не блокирующей_.

Панель:

## Связи
- [Жизненный цикл приложения](/wikipp/ru/page/cppcms_1x_application_lifetime)
## Связи
- [Жизненный цикл приложения](/wikipp/ru/page/cppcms_1x_application_lifetime)
- [Потокобезопасность](/wikipp/ru/page/thread_safety)

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0