Параллельные серверы с установлением логического соединения (TCP)

Опубликовано в Технологии > Серверные технологии

11.1. Введение

В предыдущей главе показан пример применения транспортного протокола с установлением логического соединения в последовательном сервере. В настоящей главе приведен пример параллельного сервера, в котором используется транспортный протокол с установлением логического соединения. Этот пример сервера соответствует алгоритму 8.41. Такого проекта чаще всего придерживаются программисты, разрабатывая параллельные серверы TCP. Этот сервер при обеспечении параллельного формирования ответов на запросы опирается на поддержку параллельного выполнения процессов операционной системой. Системный администратор предусматривает автоматический запуск ведущего серверного процесса во время начальной загрузки системы. Ведущий сервер функционирует неопределенно долгое время, ожидая поступления новых запросов на установление соединения от клиентов. Ведущий поток создает новый ведомый поток для обработки запросов каждого нового соединения и предоставляет каждому ведомому потоку возможность взять на себя весь обмен данными с клиентом. Как было описано в главе 8, чаще всего применяются две основные реализации алгоритма 8.4. В настоящей главе рассматривается реализация, в которой используется несколько однопотоковых процессов, а в следующей главе описана реализация с использованием нескольких потоков в одном процессе и дано сравнение этих двух реализаций.

11.2. Служба ECHO

Рассмотрим службу ECHO, описанную в главе 7. Клиент открывает соединение с сервером, а затем повторно передает данные через соединение и принимает эхо-повтор этих данных, возвращенный сервером. Сервер ECHO отвечает каждому клиенту. Он принимает запрос на установление соединения, получает данные из соединения, а затем посылает назад те же данные, которые были им приняты.

Чтобы дать возможность клиенту передавать произвольные объемы данных, сервер не выполняет чтение всей входной информации до начала отправки ответа. Вместо этого сервер чередует прием и передачу. После поступления нового запроса на установление соединения сервер входит в цикл. При каждом проходе по циклу сервер сначала читает данные, поступающие из соединения, а затем снова пишет эти данные в то же соединение. Сервер повторно выполняет эти операции до тех пор, пока не встретит признак конца файла, после чего он закрывает соединение.

11.3. Сравнение последовательных и параллельных реализаций

Последовательная реализация сервера службы ECHO может оказаться неудовлетворительной, поскольку клиенты будут вынуждены ждать завершения обработки всех предыдущих запросов на установление соединения. Если клиент решит передать большие объемы данных (например, несколько мегабайт), последовательный сервер отложит обслуживание всех других клиентов до тех пор, пока не выполнит этот запрос. Проблемы? Вашему бизнесу помогут промо футболки от Акар Групп.

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