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

6.3.4. Обмен данными по технологии dde

Обмен данными через Clipboard выполняется, как правило, при непосредственном участии пользователя.

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

DDE - это вид (или протокол) взаимодействия между приложениями, который использует разделяемую память для обмена данными между ними.

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

Технология DDE полностью вписывается в технологию Клиент-Сервер, элементы которой были рассмотрены ранее. Т. е. обмен данными по протоколу DDE происходит между двумя приложениями, одно из которых является клиентом, а другое сервером. Сервер загружается и ждет запросов на обслуживание от клиента. Клиент посылает серверу запрос на получение данных или выполнение работы. Сервер, получив запрос, выполняет действия и посылает ответ.

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

Технология DDE изначально создавалась для организации обмена данными между приложениями, выполняющимися на одной машине, но существует и развитие этой технологии для приложений, выполняющихся на разных машинах, называемое NetDDE.

Технология DDE зародилась в недрах операционных систем, управляемых событиями.

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

Обрабатывая эти события, операционная система формирует сообщения приложениям.

Приложение, которое выполняется в системе, управляемой событиями, находится в бесконечном цикле и проверяет наличие сообщений ему от операционной системы. В соответствие с характером принимаемых сообщений приложение выполняет требуемые действия и снова посылает сообщения системе.

С учетом указанной особенности, в развитии технологии DDE можно выделить три этапа.

1) Первый этап существования DDE, когда DDE реализовывался на основе прямого обмена системными сообщениями между приложениями.

Для посылки сообщений могут быть использованы системные функции SendMessage() (синхронная) и PostMessage() (асинхронная).

Для DDE выделена специальная группа сообщений, а именно:

  1. wm_DDE_Initiate - Инициировать сеанс обмена данными;

  2. wm_DDE_Terminate - Завершить сеанс обмена данными;

  3. wm_DDE_Execute - Выполнить команду;

  4. wm_DDE_Ack - Получить статус операции;

  5. wm_DDE_Poke - Послать данные серверу;

  6. wm_DDE_Request - Запросить данные у сервера;

  7. wm_DDE_Advise - Установить связь с сервером;

  8. wm_DDE_UnAdvise - Завершить связь с сервером;

  9. wm_DDE_Data - Послать данные клиенту.

Программирование обмена по данной технологии является довольно сложной задачей, что сдерживало распространение технологии DDE. Поэтому для создания приложений, реализующих DDE, была создана специализированная объектно-ориентированная библиотека DDEML, являющаяся надстройкой над DDE и предоставляющая API, облегчающий создание DDE-приложений.

Вместо непосредственной посылки DDE-сообщений с помощью функций SendMessage() и PostMessage() приложения используют функции DDEML.

2) Второй этап существования DDE, когда DDE-приложения программируются с помощью DDEML.

Этот этап далее будет рассмотрен более подробно. Отметим только, что с появлением DDEML сложность создания DDE-приложений уменьшилась, но все равно оставалась еще довольно высокой.

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

Не смотря на развитие DDE-технологии в соответствие с перечисленными тремя этапами, существуют некоторые общие концепции в нее заложенные, остающиеся неизменными.

К знакомству с этими концепциями мы и перейдем.

Система адресации данных

DDE-протокол использует трехуровневую систему адресации передаваемых данных:

Service Name - имя сервиса. Самый верхний уровень адресации. Серверы могут реализовывать несколько видов сервиса, однако чаще всего один сервер реализует один вид сервиса, поэтому в качестве имени сервиса может быть использовано имя приложения - Application.

Topic Name - имя темы, определяющее некоторый логический контекст данных. Для серверов, работающих на основе файловых документов, имя темы чаще всего совпадает с именем файла документа.

Item Name - имя элемента данных. Имя элемента идентифицирует элемент данных, который может быть передан за одну транзакцию.

Транзакцией будем называть событие передачи одного элемента данных от клиента к серверу или от сервера к клиенту.

Для DDE эти имена формируются с помощью специальной функции.

Обмен конкретными значениями данных всегда сопровождается указанием (явным или неявным) всех трех уровней, к которым относятся передаваемые данные.

Концепция функции отклика

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

Функция отклика в DDE - это и есть такая процедура-обработчик. Ее еще называют процедурой обратного вызова. Отличие от ранее рассмотренных вариантов состоит в большей сложности.

DDE-приложение определяет функцию отклика, которую DDEML будет вызывать в ответ на события, возникающие при создании соединения между приложениями, при обмене данными и при разъединении. DDEML передает в эту функцию номер транзакции, а функция по этому номеру выполняет запрограммированные действия.

Ниже представлена примерная структура функции отклика:

HDDEDATA CALLBACK DdeCallback(

UINT wType,

UINT wFmt,

HCONV hConv,

HSZ hsz1,

HSZ hsz2,

HDDEDATA hData,

DWORD lData1,

DWORD lData2)

{

if (wType == XTYP_DISCONNECT) {

Реакция на соответствующую транзакцию

}

if (wType == XTYP_ADVDATA) {

Реакция на соответствующую транзакцию

}

return(0);

}

Где:

wType - тип транзакции;

wFmt - формат данных, аналогичный форматам данных Clipboard;

hСonv - ссылка на канал;

hsz1 - ссылка на строку; это или пара (Сервис, Тема) или

hsz2 - ссылка на строку; пара (Тема, Элемент)

hData - ссылка на передаваемые или принимаемые данные;

lData1, lData2 – дополнительные данные.

Этапы функционирования DDE-приложения

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

В общем виде этапы функционирования DDE-приложения состоят в следующем:

  1. Инициализация;

  2. Обмен данными;

  3. Разъединение.

Инициализация сервера

Инициализация сервера заключается в регистрации «сервиса», предоставляемого сервером.

После инициализации сервер переходит в режим ожидания запросов от клиентов.

Инициализация клиента

Инициализация клиента заключается в создании канала связи между клиентом и сервером.

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

Обмен данными

Три варианта обмена данными могут быть реализованы с помощью DDE-технологии.

  1. Передача данных от сервера клиенту по запросу последнего;

  1. Передача данных от клиента серверу;

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

Если клиенту необходимо постоянно следить за изменениями данных, он может создать «извещающий канал». Извещающий канал может быть создан двух типов:

  1. Теплый канал;

  1. Горячий канал.

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

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

Таким образом, рассматриваются три способа передачи данных от сервера клиенту, а именно:

  1. Передача данных по запросу от клиента;

  1. Передача по теплому каналу;

  1. Передача по горячему каналу,

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

Разрыв соединения

Разрыв соединения может быть произведен как по инициативе клиента, так и по инициативе сервера.

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

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