Мультисервисные серверы (TCP, UDP)
15.1. Введение
В главе 13 было описано, как построить однопотоковый сервер, в котором используется асинхронный ввод/вывод для обеспечения псевдопараллельного обслуживания нескольких соединений, а в главе 14 показано, как обеспечить на основе мультипротокольного сервера доступ к одной и той же службе с использованием обоих транспортных протоколов, TCP и UDP. В настоящей главе понятия, рассматриваемые в этих двух главах, дополняются и объединяются на примере некоторых проектов последовательных и параллельных серверов, описанных в предыдущих главах. В ней показано, как один сервер может предоставлять доступ к нескольким службам, и этот подход иллюстрируется на примере с сервером, который поддерживает целый ряд служб в одном потоке управления. Телефон в Москве: 649-6865
15.2. Объединение нескольких серверов в одной программе
В большинстве случаев программисты для предоставления доступа к каждой службе разрабатывают отдельный сервер. Иллюстрацией к такому "односервисному" подходу могут служить примеры, рассмотренные в предыдущих главах: каждый из серверов ожидает поступления запросов через общепринятый порт и отвечает на запросы к службе, связанной с этим портом. Поэтому на компьютере обычно работает сервер службы DAYTIME, сервер службы ECHO и т.д. В предыдущей главе было показано, что сервер, в котором используется несколько протоколов, позволяет сэкономить системные ресурсы и упростить сопровождение. Те же преимущества, которые служат стимулом к применению мультипротокольных серверов, лежат в основе стремления объединить средства поддержки нескольких служб в один мультисервисный сервер.
Недостатком мультисервисного сервера является уменьшение надежности, поскольку при нарушении его работы все поддерживаемые им службы становятся недоступными.
Чтобы оценить объем затрат на создание отдельных серверов для каждой службы, необходимо рассмотреть весь набор стандартизированных служб. В протоколах TCP/IP определен широкий набор мелких служб, предназначенных для проверки, отладки и сопровождения программного обеспечения компьютеров в сети. В предыдущих главах рассматривались такие примеры служб, как DAYTIME, ECHO и TIME, но имеется и много других служб. Если в системе вызвано на выполнение по одному серверу для каждой стандартизированной службы, то в ней будут присутствовать десятки серверных процессов, даже несмотря на то, что большинство из них не получат ни одного запроса. Поэтому объединение средств поддержки многих служб в одном серверном процессе позволяет резко уменьшить число одновременно выполняемых процессов . Кроме того, поскольку поддержка многих мелких служб сводится к выполнению простейших вычислений, то основная часть кода сервера будет относиться к реализации всех нюансов приема запросов и передачи ответов. Объединение средств поддержки многих служб в одном сервере позволяет уменьшить суммарный объем кода.