FFL
1.0
Finfly Foundation Library
|
Обработчик. Подробнее...
Производные классы:server::processor и service::server::processor.
Открытые члены | |
void | enqueue (signal::tag _t) throw (...) |
void | enqueue (signal::tag _t, client *_c) throw (...) |
void | dequeue (signal &_s) throw (...) |
signal::tag | do_authorize (client *_c) throw (...) |
signal::tag | do_request (client *_c) throw (...) |
Действие по обработке запроса. | |
processor (server &_server, const char *_log) throw (...) | |
bool | inactive () throw () |
void | cancel () throw () |
Открытые статические члены | |
static processor * | self () throw () |
Получить указатель на обработчика текущего потока. | |
Открытые атрибуты | |
std::auto_ptr< ipc::socket > | Processor |
Сигнальный сокет обработчика. | |
std::auto_ptr< ipc::socket > | Dispatcher |
Сигнальный сокет диспетчера. | |
int | QueueSize |
Оценка размера очереди обработчика. | |
logbook | Log |
Журнал обработчика. | |
Статические открытые данные | |
static const long | IOTimeout = 1000 |
Время ожидения ввода/вывода данных для клиентского соединения. | |
Защищенные члены | |
int | run () throw () |
virtual void | idle () throw () |
virtual user * | authorize (const char *_name, const char *_pass) throw (...) |
virtual void | process (user &_u, request &_r) throw (...) |
Обработать запрос клиента. | |
virtual void | trace_exception (const user &_u) throw () |
Трассировать исключительную ситуацию. | |
void | checkpoint () throw (...) |
Подтвердить продолжение выполения запроса в контрольной точке. | |
Защищенные данные | |
server & | Server |
Закрытые статические члены | |
static | __declspec (thread) processor *Self |
Указатель на класс обработчика для статических функций. | |
Закрытые данные | |
client * | Client |
Контекст клиента. |
Обработчик.
static ffl::cssc::multithreaded::server::processor::__declspec | ( | thread | ) | [static, private] |
Указатель на класс обработчика для статических функций.
Статическая локальная для потока переменная, которая может использоваться функциями, где невозможно получить доступ к текущему обработчику через параметры. Переменная доступна только для чтения и не должна меняться потоком.
void server::processor::checkpoint | ( | ) | throw (...) [protected] |
Подтвердить продолжение выполения запроса в контрольной точке.
Обработчик должен периодически вызывать этот метод для запросов, которые требуют длительного времени выполнения. Это позволит клиенту принять решение о продолжении выполнения или о его прекращении. Клиенту отправляется запрос прохождения контрольной точки (сообщение с тегом cssc::CHECKPOINT). В ответ клиент должен отправить одно из сообщений:
Метод должен вызываться только при обработке запроса из метода processor::process. В этом случае установлен контекст клиента, для которого обрабатывается запрос. В других случаях результат вызова не определен.
cssc::failure | Прерывание запроса. |
server::signal::tag server::processor::do_request | ( | client * | _c | ) | throw (...) |
Действие по обработке запроса.
Действие, которое выполняет обработчик для авторизованного соединения при поступлении данных. В этом случае предполагается, что клиент передает серверу объект cssc::request, который обработчик считывает из потока соединения и передает в виртуальный метод process для обработки производным классом. В случае успешного завершения обработки выходные параметры запроса возвращаются клиенту. Если метод process вернул исключительную ситуацию cssc::failure, то она возвращается клиенту. В этом случае обработка запроса считается успешно завершенной (с точки сзения сервера).
[in] | _c | Указатель на соединение. |
std::exception | Ошибка ввода/вывода или прочие ошибки. |
virtual void ffl::cssc::multithreaded::server::processor::process | ( | user & | _u, |
request & | _r | ||
) | throw (...) [inline, protected, virtual] |
Обработать запрос клиента.
Метод выполняет обработку запроса, полученного от клиента. Производный класс должен переопределять этот метод для реализации обработки запросов.
[in] | _u | Контекст пользователя. |
[in] | _r | Запрос. |
ffl::cssc::failure | Исключительная ситуация обработки запроса. |
static processor* ffl::cssc::multithreaded::server::processor::self | ( | ) | throw () [inline, static] |
Получить указатель на обработчика текущего потока.
Возвращает указатель на объект обработчика для текущего потока. Может использоваться в функциях, где невозможно получить доступ к объекту обработчика через параметры.
virtual void ffl::cssc::multithreaded::server::processor::trace_exception | ( | const user & | _u | ) | throw () [inline, protected, virtual] |
Трассировать исключительную ситуацию.
Метод вызывается при возникновении исключительной ситуации в ходе выполнения действия (запроса, авторизации). Может использоваться производным классом для добавления в журнал информации из контекста пользователя. Метод вызывается сразу после записи в журнал обработчика информации об адресе клиента и текста исключительной ситуации.
[in] | _u | Контекст пользователя. |
[in] | _x | Исключительная ситуация. |
Контекст клиента.
Контекст клиента существует только в момент обработки запроса (при выполнении метода processor::process). В других случаях контекст не определен.
Сигнальный сокет диспетчера.
Используется обработчиком для получения и передачи управляющих сигналов диспетчеру (см. #signal).
Журнал обработчика.
При создании обработчика для него открывается журнал, куда должны записываться трассировочные сообщения. Каждый обработчик имеет собственный файл журнала. Имя файла жернала указывается в конструкторе обработчика.
Сигнальный сокет обработчика.
Используется диспетчером для передачи и получения управляющих сигналов обработчику (cм #signal).
Оценка размера очереди обработчика.
Диспетчер использует это значение для выбора наименее занятого обработчика. Оно соответствует количеству соединений, переданных на обработку, за вычетом соединений, полученных из обработки. Соединения, находящиеся в очередях обработчика, считаются находящимися в обработке.