Может ли клиент именованного канала писать в несколько экземпляров? - PullRequest
1 голос
/ 30 марта 2011

После создания нескольких экземпляров именованного канала (используя CreateNamedPipe ()) я использую CreateFile () для формирования клиентского канала.
Когда клиент записывает сообщение в канал, его получает только один экземпляр сервера.

Есть ли способ для клиента написать сообщение всем экземплярам?

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

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

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

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

Вы действительно хотите изменить ситуацию: то, что вы считаете своим клиентом, должно быть сервером и должно создавать канал и управлять им. Процессы, которым требуется уведомление, будут затем подключаться как клиенты именованного канала. Это шаблон, который может быть легко реализован с использованием WCF, с дуплексным контрактом и NetNamedPipeBinding, если это возможно.

1 голос
/ 30 марта 2011

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

...