Что такое хороший способ справиться с многопоточностью с помощью Poco SocketReactor?

Итак, я начинаю исследовать альтернативы для реализации системы клиент / сервер большого объема, и в настоящее время я смотрю на структуру Poco Reactor, поскольку я использую Poco f или многие из моих прикладных фреймворков сейчас.

Размеры входящих пакетов будут довольно небольшими, поэтому я думаю, что это будет хорошо работать с точки зрения чтения данных от клиентов. Но операции, которые будут выполняться на основе ввода клиента, будут относительно дорогими и, возможно, потребуется передать их другому процессу или даже другому серверу. И ответы, отправленные обратно клиенту, иногда бывают довольно большими.Поэтому очевидно, что я не могу заблокировать поток реактора, пока это происходит.

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

В чем я не уверен, так это в процессе отправки ответов клиенту после завершения операций.

Я не могу найти слишком много информации о лучших способах использования фреймворка. Но я провел некоторое тестирование, и похоже, что реактор будет многократно запускать событие WritableNotification, пока сокет доступен для записи. Итак, будет ли оптимальным процессом поставить в очередь данные, которые должны быть отправлены в объекте, который получает события WritableNotification, и отправлять небольшие фрагменты каждый раз, когда событие получено?

Обновление : Итак, когда я начал тестировать это, я был в ужасе, обнаружив, что загрузка ЦП сервера возросла до 100% на ЦП, на котором серверное приложение работало с одним подключением. Но, покопавшись, я обнаружил, что делаю не так. Я обнаружил, что мне не нужно регистрироваться для событий WritableNotification при создании обработчика службы, мне нужно регистрироваться только тогда, когда у меня есть данные для отправки. Затем, когда все данные будут отправлены, я должен отменить регистрацию обработчика событий. Таким образом, реактору не нужно снова и снова вызывать обработчики событий, когда нечего отправлять. Теперь моя загрузка процессора остается близкой к 0 даже при 100 подключениях. Ух!

5
задан marco.m 9 August 2012 в 13:37
поделиться