Я ищу механизм для создания простой системы обмена сообщениями «многие ко многим», позволяющей приложениям Windows взаимодействовать на одной машине, но между сеансами и рабочими столами.
У меня есть следующие проблемытребования:
- Должен работать во всех сеансах Windows на одном компьютере.
- Должен работать в Windows XP и более поздних версиях.
- Глобальная настройка не требуется.
- Нет центрального координатора / посредника / сервера.
- Не требует повышенных привилегий от приложений.
I не не требует гарантированной доставки сообщений.
Я рассмотрел множество вариантов.Это мой последний запрос об идеях.
Следующие отклонены за нарушение одного или нескольких из указанных выше требований:
ZeroMQ : для выполнения многих-в-многих обмен сообщениями требуется центральный посредник.
Именованные каналы : требуется центральный сервер для приема сообщений и их пересылки.
многоадресные сокеты : требуется правильнонастроенная сетевая карта с действительным IP-адресом, то есть с глобальной конфигурацией.
очередь совместно используемой памяти : для создания разделяемой памяти в глобальном пространстве имен требуются повышенные привилегии.
многоадресные сокеты так почти работает.Что еще можно предложить?Я хотел бы рассмотреть что угодно, от предварительно упакованных библиотек до функциональности Windows API с нуля.
( Редактировать 27 сентября ) Немного больше контекста:
By«центральный координатор / посредник / сервер», я имею в виду отдельный процесс, который должен быть запущен в то время, когда приложение пытается отправить сообщение.Проблема, которую я вижу с этим, состоит в том, что невозможно гарантировать, что этот процесс действительно будет работать, когда это необходимо.Обычно используется служба Windows, но нет способа гарантировать, что определенная служба всегда будет запускаться до того, как пользователь вошел в систему, или гарантировать, что она не была остановлена по какой-либо причине.Запуск по требованию вводит задержку при отправке первого сообщения во время запуска службы и вызывает проблемы с привилегиями.
Многоадресные сокеты почти сработали, потому что удается полностью избежать необходимости в центральном процессе координатора и не требуетповышенные привилегии от приложений, отправляющих или получающих многоадресные пакеты.Но у вас должен быть настроенный IP-адрес - вы не можете выполнять многоадресную передачу на интерфейсе обратной связи (даже если многоадресная передача с TTL = 0 на настроенной сетевой карте ведет себя так, как можно ожидать от многоадресной передачи обратной связи) - и это прерывает сделку.