1.4. Модель клиент-сервер

Общение по сети подразумевает, что между двумя компьютерами или процессами устанавливается сетевое соединение, включающее как приемник, так и передатчик, а также канал связи между ними. Модель “клиент-сервер” предполагает, что сетевое соединение является двухсторонним.

Одно и то же сетевое приложение при таком подходе выполняется двумя сторонами по-разному и состоит из части-клиента и части-сервера. Считается, что клиент запрашивает информацию или услугу, а сервер — выдает ее, то есть отвечает на запрос. Сетевое приложение в рамках модели “клиент-сервер” выполняет две различные и строго определенные функции: запрашивает и отвечает на запросы. Запрашивающая программа называется “клиент”, а отвечающая на этот запрос – “сервер”.

В большинстве случаев сетевое приложение состоит из двух независимых частей: “клиента” и “сервера”. Однако никто не запрещает объединить обе функции в одной и той же программе.

Сетевые уровни позволяют устанавливать виртуальное соединение между процессами или компьютерами. Считается, что виртуальное соединение образует виртуальную цепь. Многие проблемы исчезают, когда вы трактуете виртуальную цепь как настоящее соединение “точка-точка”, перекладывая ответственность за доставку данных на нижележащие сетевые уровни. Модель “клиент-сервер” поступает как раз таким образом.

Каждая из сторон виртуального соединения называется “сокет”. Каждая сторона, или сокет, установленного виртуального соединения обычно выполняет определенные функции. Сокет на стороне клиента, запрашивающий соединение, называется клиентом, а отвечающий на запрос — сервером. Программное обеспечение на стороне сервера называется серверной частью приложения, а на стороне клиента – клиентской частью.

Приложение-сервер, или просто сервер, как правило, инициализируется при запуске и далее бездействует, ожидая поступления запроса от клиента. Каждый сервер предоставляет определенную услугу пользователям сети по всему миру, внутри корпорации или группы.

Запрос серверу от сетевого компьютера обычно активизируется пользователем. Процесс-клиент посылает запрос на установление соединения с сервером, требуя выполнить для него определенную функцию. Например, клиент может запросить передать ему точное время или определенный файл.

Приложения-серверы делятся на два типа: последовательный и параллельный, в зависимости от метода обработки запросов.

Сервер последовательной обработки запросов

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

Сервер параллельной обработки запросов

Когда время для выполнения запроса невозможно предсказать или оно неизвестно, процесс-сервер выполняет параллельную обработку запросов. Такой сервер создаст отдельный процесс для каждого поступившего запроса. Другими словами, создается столько процессов-серверов, сколько поступило запросов. Обычно после создания процесса-обработчика сервер снова “засыпает”, ожидая обращений от новых клиентов. Конструкция сервера параллельной обработки требует, чтобы операционная система также обеспечивала параллельность, то есть способность выполнять несколько процессов в одно и то же время. Серверы с параллельной обработкой запросов обычно создаются, чтобы передавать файлы по сети, так как, вследствие неизвестных заранее размеров, время, уходящее на передачу файла, также невозможно предсказать.