Клиенты и серверы



Предыдущая | Следующая
Клиенты и серверы
Продолжим наше погружение в электронные дебри Интернета. На этот раз речь пойдет о двух разновидностях программ, с помощью которых предоставляются интернет-услуги.
В самом деле, каким образом мы пользуемся всем тем богатством, что дает нам Всемирная сеть? С помощью особых программ! Это Web-обозреватель, клиент электронной почты, программа просмотра интернет-телевидения и интернет-радио, ICQ и "чатилка". Все они очень хорошо нам знакомы.
Но программ, используемых для предоставления нам сервисов Интернета, гораздо больше. И очень многие из них нам, если так можно сказать, "не видны". То есть мы не общаемся с ними напрямую. Вообще, существуют две принципиально разные категории интернет-программ. И сейчас мы их рассмотрим.
Программы, относящиеся к первой категории, взаимодействуют непосредственно с пользователями Интернета и помогают им получать различную информацию: электронные письма, Web-страницы, сообщения интернет-пейджеров, чатов и пр. Это Web-обозреватели, клиенты электронной почты, чатов, интернет-пейджеры — все те, с которыми мы имеем дело на своих компьютерах. Такие программы называются программ-клиентами (а компьютеры, на которых они работают, — наши с вами компьютеры! — клиентскими).
Информация, с которой мы работаем посредством программ-клиентов, все эти Web-сайты, письма, звуковые и видеофайлы, хранится на других компьютерах — серверных. За выдачу ее клиентским программам, а значит, и нам, отвечают программы, относящиеся ко второй категории, — серверы. Для каждого сервиса Интернета существует свой класс серверов (и, как мы уже знаем, клиентов): Web-серверы, серверы электронной почты, чата, интернет-пейджеров, потокового вещания и пр.
Примечание
Очень часто понятие "сервер" распространяется и на серверный компьютер, и на саму программу-сервер. Это, вообще-то, неправильно, так как на одном серверном компьютере может быть установлено несколько программ-серверов, но вошло в практику.
Теперь давайте поговорим подробнее о том, как же клиенты взаимодействуют с серверами. Причем процессы приема и отправки данных мы рассмотрим отдельно.
В общем, процесс получения информации от сервера клиентов включает пять шагов.
1. Пользователь запрашивает с помощью программы-клиента некую информацию.
2. Клиент устанавливает соединение с сервером и посылает тому особый информационный блок, называемый клиентским запросом. Структура этого запроса жестко стандартизирована, чтобы сервер его понял.
3. Сервер принимает запрос и расшифровывает его.
4. Сервер извлекает нужный клиенту файл или фрагмент данных, записанных в файле, и посылает его клиенту в виде другого информационного блока — серверного ответа. Разумеется, этот ответ также жестко стандартизирован. Если же нужных данных нет, или сервер почему-то не смог понять клиентский запрос, он возвращает в составе ответа сообщение об ошибке — особый информационный блок, содержащий описание возникшей ошибки.
5. Клиент получает ответ от сервера, расшифровывает его и выдает полученную информацию пользователю. Если получено сообщение об ошибке, клиент уведомляет об этом пользователя либо предпринимает какие-то действия самостоятельно. После принятия ответа от сервера клиент разрывает соединение с ним.
Процесс отправки клиентом данных серверу включает примерно те же пять шагов.
1. Пользователь каким-то образом передает программе-клиенту отправляемую информацию.
2. Клиент устанавливает соединение с сервером и посылает тому отправляемую информацию в составе клиентского запроса. При этом отправляемая информация, как правило, особым образом шифруется.
3. Сервер принимает запрос, расшифровывает его и извлекает отправленную информацию.
4. Сервер записывает отправленную клиентом информацию в файл. После этого в случае успешной записи он отправляет клиенту в составе ответа
так называемое подтверждение — особый информационный блок, сообщающий о том, что все прошло нормально. В случае неуспешной записи отправляется сообщение об ошибке.
5. Клиент получает ответ от сервера, расшифровывает его и уведомляет пользователя об успешной или неуспешной отправке данных либо предпринимает какие-то действия самостоятельно. После принятия ответа от сервера клиент разрывает соединение с ним.
Весь процесс "общения" клиента и сервера, начиная с отправки клиентом запроса и заканчивая принятием им ответа от сервера, называется сеансом.
Ранее было сказано, что перед отправкой клиентом запроса серверу, то есть перед началом сеанса, клиент должен соединиться с сервером, иначе говоря — установить соединение. Это соединение длится ровно столько времени, сколько нужно для завершения сеанса, и поэтому называется сеансовым, или временным.
Каждое соединение требует компьютерных ресурсов. Серверу нужно хранить в памяти сведения о клиенте, установившем это соединение, а если таких соединений было установлено много (так часто и бывает), то памяти расходуется очень много. Поэтому сеансовые соединения имеют большое преимущество — они длятся очень недолго, ровно столько, сколько нужно для отправки серверного ответа, после чего разрываются, и отведенная им компьютерная память автоматически освобождается.
Но сеансовые соединения имеют огромнейший недостаток — с их помощью начать сеанс обмена данными может только клиент. А в случае, например, чата или интернет-пейджера серверу самому приходится начинать сеансы, чтобы отправить новые сообщения "отдыхающим" клиентам. В этом случае используются постоянные, или многосеансовые, подключения с другим сценарием работы.
1. Клиент устанавливает постоянное соединение с сервером.
2. Клиент и сервер обмениваются данными. При этом сеанс обмена может быть начат как клиентом, так и сервером.
3. Клиент разрывает соединение с сервером. Обмен данными окончен.
Здесь нужно обратить внимание на то, что соединение устанавливается только клиентом. Сервер же работает через уже установленное соединение.
Как правило, серверные компьютеры — настоящие монстры, содержащие, несколько процессоров, огромные дисковые массивы впечатляющей емкости, мощные средства для подключения к Интернету и специальное программное обеспечение, у которого достаточно "сил", чтобы управлять всей этой мощью. Все в них нацелено на то, чтобы обслужить как можно больше клиентов, обработать как можно больше запросов, чтобы пользователи получили запрошенную информацию за приемлемое время. Но часто, если
клиентов и запросов оказывается слишком много, ресурсов серверного компьютера не хватает, начинаются проблемы. Они могут проявляться в том, что сервер просто отказывается обслужить "лишних" клиентов, предлагая им подождать немного, когда нагрузка немного снизится, а то и в том, что могучий серверный компьютер просто-напросто "зависает". Такое тоже случается, и не так уж редко.
Ну да не будем о грустном! Не стоит начинать знакомство с таким притягательным миром интернет-технологий со столь печальных вещей, как системные сбои. Чем их меньше и чем реже они случаются, тем лучше для всех нас.
Итак, мы только что познакомились с особой архитектурой (принципом построения компьютерных систем), называемой двухзвенной, или архитектурой "клиент-сервер". Эта архитектура используется для реализации практически всех современных интернет-сервисов и пока что себя оправдывает.
Примечание
Некоторые интернет-сервисы, в частности, так называемые файлообменные сети (Napster, Gnutella, Kazaa и пр.), используют принципиально другую архитектуру — однозвенную. Здесь все компьютеры, подключенные к Интернету и реализующие этот сервис, фактически равны между собой; любой из них может выступать в роли как клиентского (запрашивать информацию у других компьютеров), так и серверного (предоставлять хранящуюся на нем информацию другим компьютерам). Само собой, здесь используется особое программное обеспечение, имеющее функции и клиента, и сервера.

 

Содержание Книга по php и mysql