• Программирование
  • C++
  • Веб-сервисы, защищенные посредством промежуточного программного обеспечения, ориентированного на обработку сообщений

Использование почтовых ящиков для связи между процессами - Использование кода

ОГЛАВЛЕНИЕ

Использование кода

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

Демонстрационные проекты

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

Второй демонстрационный проект – слушатель почтового ящика. Вы указываете имя почтового ящика и нажимаете кнопку «Создать». Как только вы сделаете это, почтовый ящик с этим именем будет существовать в вашей системе, пока программа продолжает работать. Любые сообщения, отправленные этому почтовому ящику, будут отображены программой. Так как это слушатель почтового ящика, как только вы закрываете программу, почтовый ящик исчезает.

Третий демонстрационный проект – писатель почтового ящика. Как и для демонстрационного проекта слушателя почтового ящика, вы указываете имя почтового ящика и нажимаете кнопку «Создать». Если почтовый ящик с таким именем существует, писатель соединится с ним. Затем вы сможете набрать сообщение в поле ввода сообщения, нажать кнопку «Отправить» и увидеть, как слушатель почтового ящика отобразит сообщение.

Известные ошибки

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

Почтовые ящики в сравнении с именованными каналами

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

Как сказано в начале статьи, почтовые ящики реализуют модель много писателей/один читатель. Один дескриптор читателя почтового ящика может контролировать много писателей. Именованные каналы требуют один канал на каждое соединение. Отсюда следует, что реализация модели много писателей/один читатель требует один именованный канал на каждого писателя и один дескриптор чтения на каждого писателя. Это устанавливает предел того, сколько писателей может контролировать реализация именованного канала - 64 писателя на каждый контролирующий поток.

К тому же почтовые ящики можно создавать в любой 32-битной реализации Windows, включая Windows 95. Это позволяет в любой момент включить семейство операционных систем Win9X в целевую аудиторию. Система Win9X может подключиться к именованному каналу, но не может создать его – для создания именованного канала нужны Windows NT и потомки.

Зато почтовые ящики используют датаграммы UDP(протокол датаграмм пользователя дейтаграмма) для передачи. Это значит, что доставка сообщения не гарантирована. Это значит, что не гарантировано получение сообщений в порядке их отправки. Если для вашего приложения важно, чтобы сообщения были получены в порядке отправки, почтовые ящики не обязательно подойдут вам. Вы можете использовать почтовые ящики в качестве механизма связи между процессами на одной и той же машине - шансы потерять сообщение или отправить не по порядку крайне малы на локальном компьютере (но будьте осторожны, если ваш локальный компьютер многопроцессорный). Если вы отправляете сообщение через сеть, и каждое сообщение обязательно должно прийти в верной последовательности, ищите другой механизм связи между процессами.

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