Каковы хорошие способы заставить что-то вроде D-Bus работать на нескольких машинах Linux, возможно, через брандмауэры?

В спецификации D-Bus говорится, что

D-Bus - это... простой способ для приложений общаться друг с другом... В настоящее время взаимодействующие приложения находятся на одном компьютере...

Я хотел бы что-то вроде D-Bus, но для работы на нескольких машинах Linux, и могут быть задействованы брандмауэры. Например, если мой почтовый сервер решит, что он получил важное сообщение, я хотел бы, чтобы он отправил событие в шину, которую мой домашний компьютер может увидеть и, возможно, ответить, запустив окно linpopup.

События, которые меня интересуют, происходят относительно нечасто, так что низкопроизводительный метод подходит. Но я бы предпочел не изобретать велосипеды. Я также предпочел бы, чтобы как можно больше было написано на сценариях оболочки или других языках высокого уровня и как можно меньше на C (но я готов вызывать C API, если это необходимо).

Как я интерпретирую официальные веб-страницы D-Bus, они говорят, что было бы неплохо получить D-Bus общаться с несколькими компьютерами, но это не работает.

Изменить. Что меня привлекает в D-Bus, так это модель публикации и подписки:

  • Машина, которая наблюдает интересное событие, публикует это событие в «системе».

  • Машина, которая интересуется определенными событиями, подписывается только на эти события. Когда происходит событие, «система» сообщает об этом машине.

В D-Bus «система» — это отдельная машина. Я хочу что-то подобное для нескольких машин. Это исключает прямые решения, такие как TCP или SMTP, для связи между машинами. Но я счастлив иметь центральный сервер, который получает все запросы на публикацию и подписку. Я начинаю думать, что было бы проще создать свой собственный, чем разбираться в Advanced Message Queuing Protocol (AMQCP), что слишком сложно для таких, как я.

Производительность не имеет значения. Простота, безусловно, цель.

Еще раз: какое программное обеспечение я должен посмотреть?


person Norman Ramsey    schedule 01.05.2009    source источник
comment
Является ли этот вопрос (и удаленным документом по D-Bus) устаревшими в отношении состояние удаленного D-Bus? См. этот другой вопрос SO.   -  person Craig McQueen    schedule 31.07.2013


Ответы (8)


«Новой вещью» для управления сообщениями и связи между приложениями, по-видимому, является Rabbit.

Является реализацией AMQP, которая устанавливает обмен сообщениями, маршрутизацию и безопасность...

Проверь это:

http://www.rabbitmq.com

http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

person Andor    schedule 02.05.2009
comment
Опубликовать и подписаться — это почти то, что я хочу, но спецификация AMQP заставила меня в ужасе бежать. +1 в любом случае. - person Norman Ramsey; 02.05.2009
comment
В качестве последнего варианта вы можете установить систему обмена сообщениями на основе XMPP (Jabber), но с программным обеспечением в качестве клиентов, а не людей... Я слышал, что некоторые люди используют такую ​​настройку... Будет ли это работать? для тебя? У вас есть множество библиотек для подключения к XMPP, а также серверы, такие как OpenFire, которые расширяются с помощью плагинов, поэтому вы можете легко запрограммировать их поведение с сообщениями... - person Andor; 03.05.2009

Вы должны искать решения для обмена сообщениями, но они зависят от того, на каком языке вы собираетесь работать. Java уже некоторое время имеет эту функцию, называемую JMS (Java Message Service). Однако существуют и другие реализации.

  • ZeroMQ имеет привязки API для: C, C++, Python, .NET/Mono и других.
  • OpenAMQ имеет привязку API для: Python, Java, Ruby и C.

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

person Andrioid    schedule 02.05.2009
comment
Больше AMQP, к сожалению... сложные, высокопроизводительные решения там, где мне нужно простое решение с низкой производительностью. - person Norman Ramsey; 02.05.2009

Возможно, я упускаю суть (вполне возможно!), но почему бы просто не использовать SMTP и не отправлять сообщения электронной почты? Или TCP-пакеты, а на другой стороне есть программа-слушатель?

person Andy Mikula    schedule 01.05.2009
comment
Я бы предпочел не изобретать колеса. Машины ходят вверх и вниз; программы-слушатели очень сложно писать; машины за брандмауэром могут выходить по TCP, но другие не могут входить по TCP. Существует много проблем и вопросов по дизайну; Я хотел бы использовать существующую инфраструктуру. - person Norman Ramsey; 02.05.2009
comment
SMTP — отличная идея. Вся инфраструктура передачи сообщений есть, брандмауэр не остановит правильно ретранслируемые входящие и исходящие сообщения, а procmail + ваш любимый сценарий оболочки должны справиться с остальным. - person vezult; 02.05.2009

Я не знаю таких готовых решений.

Я предлагаю вам написать сценарии, которые используют curl или wget для отправки запросов HTTP POST в очень простое веб-приложение, содержащее вашу информацию. А другая машина периодически опрашивает ту же сеть и ПОЛУЧАЕТ информацию.

Comet может улучшить опрос противность, но, вероятно, потребует больше усилий.

person hayalci    schedule 02.05.2009

Решение для очереди сообщений (MQ) на основе TCP/IP или ПО промежуточного слоя (MOM), ориентированное на сообщения, должно соответствовать вашим потребностям. Большинство зрелых предложений предоставляют привязки на родном языке для различных языков. Мне повезло с ActiveMQ, у него есть интерфейс командной строки, которого может быть достаточно для простых задач написания сценариев.

Немного предыстории можно найти здесь: http://en.wikipedia.org/wiki/Message-Oriented_Middleware

Удачи,

Шеннон

person Community    schedule 30.06.2009

Поскольку мои исследования привели меня к этому древнему вопросу, и с тех пор многое произошло, я хотел бы добавить к нему.

Вы хотите взглянуть на MQTT, который является стандартом для IoT. Это стандарт ISO и OASIS с 2016 года. http://mqtt.org/

Он очень прост в использовании и разработан, чтобы быть легким. Принцип публикации/подписки.

Очень хорошей реализацией является Mosquitto https://mosquitto.org/, который находится под эгидой Eclipse. В проекте Eclipse Paho есть клиентские библиотеки по адресу https://eclipse.org/paho/ .

person Mattias Backman    schedule 20.01.2017

Если вы заинтересованы в использовании протокола более низкого уровня, вы можете попробовать SOAP. Он не так эффективен, как бинарные протоколы, и вам придется самостоятельно создавать очереди более высокого уровня, но он может работать через веб-прокси и через SMTP-серверы. Есть достойная реализация PERL, с которой я экспериментировал раньше.

Для получения дополнительной информации:

http://www.w3schools.com/soap/default.asp

person Jay Dubya    schedule 03.05.2009
comment
Спасибо; в чем вы видите преимущество использования XML и HTTP? (Я не хочу платить налог на угловую скобку.) - person Norman Ramsey; 04.05.2009
comment
HTTP, потому что вы можете избежать проблем с брандмауэром/прокси. XML неоптимален, но SOAP является стандартом с несколькими реализациями на разных платформах, которые, как мы надеемся, устранили свои ошибки (в основном). Реализация SOAP::Lite также имеет ряд простых, но раздражающих вещей, таких как сжатие, SSL и аутентификация, о которых уже позаботились за вас, что позволяет вам сосредоточиться на реализации более высокого уровня. - person Jay Dubya; 04.05.2009

Вам следует рассмотреть возможность передачи сообщений D-Bus между машинами. Напишите приложение моста сообщений, которое будет получать сообщения D-Bus, фильтровать их и отправлять определенные сообщения в обмен темами AMQP. Это можно легко сделать с RabbitMQ в качестве брокера MQ, и стоит потратить время на изучение модели AMQP. Сайт RabbitMQ заполнен документами, учебными пособиями, блогами и часто задаваемыми вопросами.

Типичное использование AMQP состоит в том, чтобы иметь процесс производителя сообщения, а затем процесс потребителя сообщения, который может находиться на другом компьютере. Производитель просто подключается к брокеру, а затем публикует сообщения в обмене темами с тегом ключа маршрутизации. Exchange — это процесс на брокере, который направляет сообщения в очереди. Потребитель сообщений также подключается к брокеру, но это может быть другой брокер. Затем потребитель объявляет имя очереди для использования. и привяжите это имя очереди к именованному Exchange с помощью ключа привязки. Ключ привязки — это шаблон, который сопоставляется с любыми ключами маршрутизации, поступающими на биржу. В простейшем случае ключ маршрутизации и ключ привязки совпадают, но более интересно, когда привязка включает шаблоны подстановочных знаков.

Если вы действительно не хотите изучать AMQP, используйте 0MQ для соединения машин. 0MQ намного проще и в основном позволяет вам иметь сокеты с несколькими конечными точками.

person Michael Dillon    schedule 07.05.2011