Альтернативные реализации
Примеры реализации серверных алгоритмов, описанных в этой главе, приведены в главах с 9 по 13. В главах 14 и 15 эти принципы дополнены двумя важными практическими методами реализации, которые не рассматривались в этой главе; в них описаны мультипротокольные и мультисервисные серверы. Хотя эти методы предоставляют привлекательные преимущества для некоторых приложений, они не были здесь описаны, поскольку их легче понять, рассматривая как простые обобщения алгоритма однопотокового сервера, которые описаны в главе 13.
8.31. Резюме
В основе работы сервера лежит простой алгоритм: в программе выполняется бесконечный цикл, в котором сервер ожидает поступления следующего запроса от клиента, обрабатывает запрос и передает ответ. Однако на практике для достижения надежности, гибкости и эффективности используется целый ряд реализаций серверов. sotmarket.ru - nokia c5-03 lime green.
Последовательные реализации могут применяться для служб, требующих небольшого объема вычислений. При использовании транспортного протокола с установлением логического соединения последовательный сервер одновременно поддерживает только одно соединение, а при использовании транспортного протокола без установления логического соединения последовательный сервер одновременно обрабатывает только один запрос.
Для повышения эффективности в серверах часто применяется параллельная организация работы, позволяющая обрабатываясь сразу несколько запросов. В сервере с установлением логического соединения параллельная поддержка соединений достигается путем создания отдельного потока или процесса для поддержки каждого соединения. В сервере без установления логического соединения параллельная организация работы обеспечивается путем создания нового потока или процесса для обработки каждого нового запроса.
В тупиковой ситуации может оказаться любой сервер, реализованный на основе одного потока выполнения, в котором применяются такие синхронные системные функции, как recv, read, send или write. Тупиковая ситуация может возникать в последовательных серверах, а также в параллельных серверах, в которых используется однопотоковая реализация. Проблема тупиковых ситуаций является особенно важной в связи с тем, что если не будут приняты меры, то единственный неправильно действующий клиент может исключить возможность обработки сервером запросов других клиентов.
Материал для дальнейшего изучения
В поставку операционной системы Linux и других версий UNIX входят серверы, которые могут служить прекрасными образцами реализации многих серверных алгоритмов; программисты, изучая методы программирования, охотно знакомятся с исходным кодом этих серверов.
Упражнения
- Рассчитайте, сколько времени потребуется последовательному серверу для передачи файла объемом 200 Мбайт, если объединенная сеть имеет пропускную способность 2,3 Кбайт/с.
- Бели в среднем 20 клиентов посылают на последовательный сервер по 2 запроса в секунду, то какое максимальное время может затрачиваться сервером на обработку каждого запроса?
- Подключаясь с разных клиентских компьютеров к параллельному серверу с установлением логического соединения, определите, какое время в среднем затрачивается сервером для приема запросов на установление соединения и создания для их обслуживания новых процессов? Новых потоков?
- Напишите алгоритм для параллельного сервера без установления логического соединения, который создает новый процесс для каждого запроса.
- Доработайте алгоритм, описанный в условиях предыдущего упражнения, таким образом, чтобы сервер создавал по одному новому процессу для каждого клиента, а не создавал новый процесс в ответ на каждый запрос. Как обеспечить с помощью этого алгоритма завершение работы процесса?
- Серверы с установлением логического соединения обеспечивают параллельную поддержку соединений. Есть ли смысл еще больше повысить степень распараллеливания работы параллельного сервера с установлением логического соединения, предусмотрев создание в ведомых потоках дополнительных потоков для каждого запроса? Объясните ваш ответ.
- Перепишите программу клиента эхо-сервера TCP таким образом, чтобы в ней использовался один поток выполнения для параллельной обработки ввода с клавиатуры, ввода из соединения TCP и вывода в соединение TCP.
- Могут ли клиенты вызывать тупиковую ситуацию или нарушать обслуживание других клиентов параллельными серверами? Объясните ваш ответ.
- 8Тщательно изучите системный вызов select. Как можно использовать функцию select в однопотоковом сервере для предотвращения тупиковой ситуации?
- Вызов функции select принимает параметр, в котором указано число проверяемых этой функцией дескрипторов ввода/вывода. Объясните, как с использованием этого параметра обеспечить переносимость программы однопотокового сервера на многие системы UNIX.