Обмен данными через канал
обмена
Автор: Ion Tichy. (http://www.iont.20m.com)
Требования: VC6, WindowsNT4, Windows2000
1. Описание
Простой и быстрый способ связи между всеми
типами приложений MFC на одном или нескольких
компьютерах в Windows NT.
2. Основные возможности
Передача данных от Клиента к Серверу, обработка
их и, при необходимости, возврат результатов.
Передача информационных данных о возможных
событиях от Сервера к Клиенту.
Различные схемы распределения буфера.
Автоматическая загрузка Сервера.
При необходимости, автоматическое завершение
Сервера без участия Клиента.
Утилиты для регистрации, автоматической
загрузки, трейсинга (tracing) и Визарда (Wizard).
3. Введение
Несколько лет назад я написал классы, с
использованием почтовых слотов (Mailslots) для связи
между Клиентом и Сервером. Согласно требованиям
проекта, эти классы должны были работать в Windows 95.
Несмотря на многочисленные проблемы и
ограничения почтовых слотов, эти классы
корректно работают в Windows 95 и Windows NT.
Вышеупомянутые проблемы заключаются в
следующем:
- 8-байтовое ограничение имён почтовых слотов в
Windows 95 и
- большой трафик между компьютерами через
почтовые слоты, если на них установлены
различные идентичные протоколы передачи данных.
Microsoft объясняет это особенностями архитектуры.
Другими словами, это не ошибка, но я не согласен с
такой расстановкой вещей.
В данных классах Сервер имеет поток, отвечающий
за приём, а Клиенты посылают данные со своими (Клиентскими)
идентификаторами (Имя компьютера и имя клиента) в
этот поток. В итоге это увеличивает суммарный
объём передачи данных, которые передаёт Клиент
через почтовые слоты. Это и есть недостаток
данного метода.
После изучения технологий COM и ATL я пришёл к
выводу, что ATL очень удобный инструмент, однако, и
в ней есть некоторые ограничения, такие как
невозможность создания ATL-Сервера из
существующего приложения MFC.
Внедрения DCOM в приложение также требует
больших усилий. Например, я трудился над своей
первой программой с DCOM как минимум 2 недели и
вынужден был долго искать ответы на свои вопросы
у Microsoft. Именно поэтому, несмотря на моё желание
использовать COM/DCOM в новом проекте, пришлось
отказаться от этой идеи.
Новый проект, над которым я начал работать,
требовал высокой скорости обработки данных.
Данный фактор нужно было обязательно учесть при
разработке нового механизма связи. К счастью, в
отличие от COM, небыло никаких требований к
универсальности механизма. Это значительно
упростило разработку приложения.
Итак, я остановился на Именованных каналах (Named
Pipes) работающих только в Windows NT. В литературе
данный протокол описывается следующим образом:
Механизм взаимодействия процессов, который
позволяет одному процессу связываться с другим (локальным
или удалённым) процессом.
Так же я попытался использовать идею почтовых
слотов (Mailslots) из моего первого проекта, а так же
механизм COM. Далее мы рассмотрим архитектуру
Клиент-Сервер, основанную на протоколе
Именованных каналов (Named Pipes).
4. Архитектура Клиент-Сервер
Итак, существуют следующие варианты связи
Клиента и Сервера.
- Клиент и Сервер на одном компьютере.
- Клиент и Сервер на разных компьютерах.
Кликните сюда для увеличения картинки
Итак, когда Сервер загружен, то Клиент пытается
установить соединение с Сервером.
Если Сервер не загружен и, Клиент и Сервер
находятся на одном компьютере, то Клиент может
получить информацию о Сервере из реестра этого
компьютера (см. Computer 4).
Если Сервер не загружен и, Клиент и Сервер на
разных компьютерах, то Клиент может получить
информацию о Сервере из реестра другого
компьютера, на котором находится Сервер
посредствам утилиты AgentCP (см. Computers 1 и 2). Данная
програмка ищет информацию о Сервере в реестре
серверного компьютера и загружает его.
Как видно из рисунка, для успешного
функционирования вышеупомянутого процесса
необходимо:
- Записать информацию о сервере в реестр
серверного компьютера.
- Предварительно запустить на удалённом
компьютере утилиту AgentCP.
Таким образом, выполняется автоматическая
загрузка Сервера. Процесс-Сервер может быть
автоматически завершён, если Клиент не
приконнектился.
А вот так выглядит приложение WizardCP:
Кликните сюда для увеличения картинки
Downloads
Скачать юзер мануал - 169 KB
Скачать демонстрационный проект -
200 KB
Скачать WizardCP - 40 KB
Скачать Test, сгенерированный
посредствам WizardCP - 119 KB
|