logo
Ответы к экзамену по ПСП

Структура параллельного сервера. AcceptServer.GarbageCleaner.

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

Назначение сервера является, одновременное обслуживание нескольких клиентских программ. Обслуживание заключается в получении от клиента по установленному TCP-соединению последовательности символов и в возврате (пересылке) этой последовательности обратно. Кроме того, предполагается, что сервер может выполнять команды, введенные с консоли управления, с которой поддерживается связь через именованный канал (NamedPipe).

Процесс main. Основным назначением процессаmain, является запуск, инициализация и завершение работы сервера. Как уже отмечалось, именно этот процесс первым получает управление от операционной системы. Процессmainзапускает основные процессы:AcceptServer,ConsolePipeиRConsole.

Процесс AcceptServer.AcceptServerсоздается процессомmainи предназначен для выполнения процедуры подключения клиентов к серверу, для исполнения команд консоли управления, а также для запуска процессов EchoServer, обслуживающих запросы клиентских программ по созданным соединениям. Кроме того,AcceptServerсоздает список подключений, который далее будем называтьListContanct. При подключении очередного клиента, процессAcceptServerдобавляет вListContactэлемент, предназначенный для хранения информации о состоянии данного подключения.

Процесс ConsolePipe. ConsolePipeсоздается процессомmainи является сервером именованного канала, по которому осуществляется связь между программойRConsole(консоль управления сервером) и параллельным сервером.

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

Процесс EchoServer. ПроцессыEchoServerсоздаются процессомAcceptServerпо одному для каждого успешного подключения программы клиента. Основным назначением процессаEchoServerявляется прием данных по созданному процессомAcceptServerподключению и отправка этих же данных без изменения обратно программе клиента. Условием окончания работы сервера является получение от клиента пустого сегмента данных (имеющего нулевую длину).

Программа Client. ПрограммаClientпредназначена для пересылки данных серверу и получения ответа от сервера. Программа может работать, как на одном компьютере с сервером (будет использоваться интерфейс внутренней петли), так и на другом компьютере, соединенным с компьютером сервера сетьюTCP/IP. Для окончания работы с сервером программа формирует и отправляет сегмент данных нулевой длины.

Программа RConsole. ПрограммаRConsoleпредназначена для ввода команд управления сервером и для вывода диагностических сообщений полученных от сервера .RConsoleявляется клиентом именованного канала.

Список подключений ListContact. СписокListContact(не изображен на рисунке) создается основе стандартного классаlistи предназначен для хранения информации о каждом подключении. Список создается пустым при инициализации процессаAcceptServer. В рамках этого же процесса осуществляется добавление элементов списка, по одному для каждого подключения. При отключении программы клиента от сервера, соответствующий элемент списка помечается, как неиспользуемый. Удаление неиспользуемого элемента осуществляется процессомGarbageCleaner, который работает в фоновом режиме.