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

В спецификации D-Bus указано, что

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

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

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

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

Редактировать : Что меня привлекает в D-Bus, так это модель , публикуйте и подписывайтесь :

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

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

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

Производительность не является объектом. Простота определенно является объектом.

Еще раз: на какую программу мне смотреть?

Ответы [ 8 ]

2 голосов
/ 02 мая 2009

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

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

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

2 голосов
/ 02 мая 2009

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

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

проверьте это:

http://www.rabbitmq.com

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

1 голос
/ 20 января 2017

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

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

Это очень простой в использовании и легкий дизайн. Принцип публикации / подписки.

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

1 голос
/ 01 июля 2009

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

Здесь можно найти немного фона: http://en.wikipedia.org/wiki/Message-oriented_middleware

Удачи,

Shannon

1 голос
/ 02 мая 2009

Я не знаю ни одного готового решения, подобного этому.

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

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

1 голос
/ 02 мая 2009

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

0 голосов
/ 07 мая 2011

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

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

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

0 голосов
/ 03 мая 2009

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

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

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

...