Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os6.doc
Скачиваний:
0
Добавлен:
20.06.2023
Размер:
199.68 Кб
Скачать

6.2. Концепции технологии «Клиент-Сервер»

Технология клиент/сервер - это распределение прикладной программы по двум логически различным компонентам, каждый из которых выполняет свои отдельные функции.

Обычно клиент дает запросы на сервер на выполнение от своего имени определенной работы.

Задачей сервера является обработка запросов и возврат результатов клиенту.

З а п р о с ы

|- - > - > - > - | > - > - > - > ----------|

^ | v

---|------ | -----|----

| Клиент | | | Сервер |

---|----- | -----|----

^ | v

|-- - < - < - < - | < - < - < - < ----------|

О т в е т ы

Этот процесс чаще всего происходит на физически разделенных компьютерах через тот или иной тип сети. Хотя это и не обязательно.

Чтобы приложение стало действительно приложением клиент/сервер, необходима соответствующая архитектура. Логика приложения должна быть разделена на отдельные компоненты - запрашивающий компонент, который дает запросы и ожидает возврата от отвечающего компонента - сервера.

Такое логическое разделение позволяет лучше подготовить приложение к распределению в сети.

Независимость компонентов приложения - обязательное требование архитектуры клиент/сервер.

Какие из компонентов приложения лучше рассматривать как клиентские, а какие - как серверные, является вопросом проектирования. Можно дать лишь следующие общие рекомендации:

Клиент: ввод/вывод информации; взаимодействие с пользователем; формулировка запросов; логика приложения.

Сервер: запросы к совместно используемым ресурсам; обработка транзакций.

Правильное распределение кода по клиентскому и серверному компонентам является ключевым вопросом в проектировании системы.

Взаимодействие между серверными и клиентскими компонентами приложения может быть декомпозировано на приведенные выше 7 уровней. И на каждом из уровней, особенно начиная с 3-го, можно выделять клиентский и серверный компоненты.

Существует множество методов взаимодействия между клиентскими и серверными компонентами: Выбор метода определяется тем, к какому из двух видов относится взаимодействие: к внутреннему или внешнему.

6.3. Внутренние коммуникации между процессами

6.3.1. Неименованные каналы

Канал – это участок разделяемой памяти, который процессы могут использовать для взаимодействия. Процесс, который создает канал, является процессом – сервером. Процесс, который соединяется с каналом, является процессом – клиентом. Один процесс пишет информацию в канал, другой процесс читает из канала.

Каналы могут быть двух типов:

  1. Неименованные каналы;

  1. Именованные каналы.

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

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

Как создается неименованный канал в Unix-подобных ОС, мы рассматриваем в лабораторных работах. Здесь рассмотрим API для работы с неименованными каналами в в среде Windows. Неименованный канал создается вызовом:

CreatePipe(&hReadPipe, &hWritePipe, NULL, 0);

Вызов возвращает две ссылки, одна из которых используется для чтения, а другая для записи.

Там, где передан 0, указывается размер канала. При значении 0 система устанавливает размер по умолчанию.

Чтение производится вызовом:

ReadFile(hReadPipe, &NewByte, 1, &NumberOfBytesRead, NULL);

Запись производится вызовом:

WriteFile(hWritePipe, Buffer, nBytes,&NumberOfBytesWritten, NULL);

Канал закрывается вызовами для каждой ссылки:

CloseHandle(hReadPipe);

CloseHandle(hWritePipe);

Если процесс обратился за чтением к пустому каналу, то он будет заблокирован, пока какой-нибудь другой процесс не запишет данные.

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

Соседние файлы в предмете Операционные системы