FFL  1.0
Finfly Foundation Library
Классы | Открытые члены | Защищенные члены | Защищенные данные | Закрытые члены | Закрытые данные
Класс ffl::cssc::multithreaded::server

Многопоточный сервер приложений. Подробнее...

Граф наследования:ffl::cssc::multithreaded::server:
Inheritance graph
[см. легенду]

Полный список членов класса

Классы

class  client
 Соединение с клиентом. Подробнее...
class  processor
 Обработчик. Подробнее...
struct  signal
 Сигнал обработчика. Подробнее...
class  user
 Пользовательский контекст. Подробнее...

Открытые члены

 server (size_t _max_users, size_t _max_processors, const char *_log_name, long _idle_timeout=5000) throw ()
 Конструктор.
void run (const char *_host, const char *_service) throw (...)
 Выполнить основной цикл сервера.
void cancel () throw ()
 Завершить основной цикл сервера.

Защищенные члены

virtual void idle () throw (...)
 Самообслуживание.
virtual void trace_request (const user &_u) throw ()
 Трассировка поступления запроса.
virtual void just_started () throw ()
 Диспетчер запущен.
virtual void just_ready () throw ()
 Инициализация диспетчера закончена.
virtual void just_canceled () throw ()
 Рабочий цикл диспетчера завершен.
virtual processorscale (const char *_log_name) throw (...)
 Создание нового рабочего потока.

Защищенные данные

logbook Log
 Журнал сервера.

Закрытые члены

void initialize_listeners (const char *_n, const char *_s) throw (...)
 Инициализировать список сокетов для прослушивания входящих соединений.
void dispatch (client *_c) throw (...)
void sweep_out_inactive_processors () throw ()
 Удалить завершенные обработчики.
void dismiss (client *_c) throw ()

Закрытые данные

ipc::socket::environment Environment
size_t MaxClients
 Максимальное количество клиентов.
size_t MaxProcessors
 Максимальное количество рабочих процессов.
size_t CountProcessors
 Счетчик запущенных обработчиков (бех учета завершенных). Используется для последовательной нумерации обработчиков.
long IdleTimeout
 Время для определения состояния простоя.
std::list< processor * > Processors
 Массив обработчиков.
std::list< ipc::socket * > Listeners
std::list< client * > Clients
 Список клиентов.
volatile sig_atomic_t Cancel
 Признак завершения сервера.

Подробное описание

Многопоточный сервер приложений.


Конструктор(ы)

ffl::cssc::multithreaded::server::server ( size_t  _max_users,
size_t  _max_processors,
const char *  _log_name,
long  _idle_timeout = 5000 
) throw () [inline]

Конструктор.

Создает сервер с указанными параметрами. Для запуска основного цикла сервера используется метод server::run.

Аргументы:
[in]_max_usersМаксимальное количество клиентов.
[in]_max_processorsМаксимальное количество рабочих потоков.
[in]_log_nameИмя журнала.
[in]_idle_timeoutВремя для определения состояния простоя (см. server::idle).

Методы

void server::cancel ( ) throw ()

Завершить основной цикл сервера.

Устанавливает признак завершения основного цикла сервера. Метод server::run будет завершен после завершения всех активных рабочих потоков. Метод должен вызываться из того же потока, который выполняет основной цикл сервера (например, из обработчика прерывания). Если метод вызывается из другого потока, до должны использоваться примитивы синхронизации потоков.

void server::idle ( ) throw (...) [protected, virtual]

Самообслуживание.

Метод вызывается сервером во время простоя. Сервер считает, что он простаивает, если за определенное время (см. server::server параметр _idle_timeout) не поступало новых соединений, не происходило отключения соеднинений, рабочие потоки не возвращали соединения после обработки запросов.

Стандартная реализация проверяет наличие остановленных вследствие ошибки рабочих потоков. Для остановленных рабочих потоков перераспределяет очереди обработанных и ожидающих обработки соединений (при этом могут запускаться новые рабочие потоки).

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

Исключения:
std::exceptionОшибка при выполнении самообслуживания.
void server::initialize_listeners ( const char *  _n,
const char *  _s 
) throw (...) [private]

Инициализировать список сокетов для прослушивания входящих соединений.

Аргументы:
[in]_nУказатель на строку с именем узла (хоста), адрес которого будет использоваться для прослушивания входящих соединений. Может быть NULL, если будут прослушитваься все зарегистрированные сетевые интерфейсы.
[in]_sУказатель на строку с именем (номером) сервиса, который бедт использоваться для прослушивания входящих соединений. Не может быть NULL. Если указано имя сервиса, то он должен быть зарегистрирован в ... drivers/etc/services. std::exception Ошибка при формировании списка. В случае возникновения исключительной ситуации часть сокетов может быть успешно создано.
virtual void ffl::cssc::multithreaded::server::just_canceled ( ) throw () [inline, protected, virtual]

Рабочий цикл диспетчера завершен.

Вызывается после завершения рабочего циакла диспетчера. Отмечает момент завершения работы сервера. Новые запросы клиента не принимаются.

Переопределяется в ffl::cssc::multithreaded::service::server.

virtual void ffl::cssc::multithreaded::server::just_ready ( ) throw () [inline, protected, virtual]

Инициализация диспетчера закончена.

Вызывается после инициализации диспетчера и перед началом выполнения рабочего цикла диспетчера.

Переопределяется в ffl::cssc::multithreaded::service::server.

virtual void ffl::cssc::multithreaded::server::just_started ( ) throw () [inline, protected, virtual]

Диспетчер запущен.

Вызывается непосредствнно при входе в основной чикл диспетчера.

Переопределяется в ffl::cssc::multithreaded::service::server.

void server::run ( const char *  _host,
const char *  _service 
) throw (...)

Выполнить основной цикл сервера.

Метод выполняет основной цикл сервера до момента получения команды завершения работы (см. server::cancel). Метод возвращает управление после завершения всех рабочих процессов. После завершения основной цикл сервера может быть запущен для другого хоста и сервиса.

Аргументы:
[in]_hostАдрес.
[in]_serviceПорт.
Исключения:
std::exceptionОшибка в ходе работы сервера. Исключительная ситуация сигнализирует, что работа сервера была прервана связи с непредвиденной ситуацией и ресурсы (память, потоки, соединения) не были полностью освобождены. Сервер старается перехватывать и обрабатывать возникающие исключительные ситуации. Возврат с исключительной ситуацией означает возникновение неисправимой ошибки, в результате которой может быть нарушена целостность процесса в целом. В этом случае работа вызывающей программы должна быть по возможности завершена.
virtual processor* ffl::cssc::multithreaded::server::scale ( const char *  _log_name) throw (...) [inline, protected, virtual]

Создание нового рабочего потока.

Метод может использоваться в производном классе для создания адаптированных (производных от processor)рабочих потоков.

Аргументы:
[in]Указательна строку, которая соделжит имя файла жарнала для создаваемого потока.
Возвращает:
Указатель на новый рабочий поток.
Исключения:
std::exceptionОшибка при создании рабочего потока.
void server::sweep_out_inactive_processors ( ) throw () [private]

Удалить завершенные обработчики.

Проверяет существования обработчиков с завершенными потоками. Переносит исходящую очередь завершенного обработчика в список ожидания, и перепланирует его входящую очередь. Если перепланирование входящей очереди не возможно (например, из-за отсутствия активных обработчиков), то соединение удаляется.

virtual void ffl::cssc::multithreaded::server::trace_request ( const user _u) throw () [inline, protected, virtual]

Трассировка поступления запроса.

Метод вызывается диспетчером для авторизованного клиента в момент, когда от клиента поступили данные для обработки. Метод вызывается после записи в журнал адреса соединения. Производный класс может использовать этот метод для добавления в журнал информации из контекста пользователя.

Аргументы:
[in]_uКонтекст пользователя.

Объявления и описания членов классов находятся в файлах:
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Макросы