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

Цикл обработки событий

Цикл обработки событий и взаимодействие с потоковым пулом

У сервиса 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 и обрабатывать различные асинхронные события.

  2. Можно "постить" различные операции для выполнения в цикле обработки событий используя cppcms::service::post() из других потоков.

    Это особенно важно, когда хотите сделать интеграцию между синхронными и асинхронными приложениями.

    Вы должны помнить, что большинство объектов CppCMS, включая http::context - не являются потокобезопасными для доступа из нескольких потоков, поэтому если какая-то операция должна быть выполнена над объектами, работающими в цикле обработки событий, это должно быть сделано "постингом" обработчиков для выполнения в цикле обработки событий.

Важно помнить, что каждая операция выполняющаяся в цикле обработки событий должна быть очень быстрой и никогда не блокирующей.

Проект

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

Размещение

SourceForge.net Logo

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

CppCMS needs You


Навигация

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



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