Каков наилучший способ асинхронного взаимодействия распределенных процессов?

StackOverflow https://stackoverflow.com/questions/632896

  •  08-07-2019
  •  | 
  •  

Вопрос

Я разрабатываю приложение, в котором распределенные компоненты взаимодействуют друг с другом по сети асинхронным способом типа pub / sub.

Для этого мне нравится идея отправки XML через сокеты - это асинхронно, мне не нужен какой-либо сервер, и он может работать локально или по сети.Мне пришлось бы задействовать свой собственный механизм pub / sub, что, вероятно, не будет слишком обременительным - я мог бы использовать IP-адрес в качестве идентификатора подписчика.Языком реализации будет C++.Я уже использовал этот метод раньше с хорошими результатами.Но, интересно, есть ли способ получше?Любой совет приветствуется.

Редактировать:Я еще не принял решения, но меня интересует комментарий cparkode к protobuf:

"Я никогда не понимал популярности использования XML для сетевого общения.В любом случае, я понимаю, что протокол - это только часть вашей проблемы, но по этому вопросу тоже есть Google protobuf: http://code.google.com/p/protobuf/ – caparcode (11 марта в 1:01)"

Это было полезно?

Решение

Вместо использования XML, возможно, было бы лучше использовать существующую платформу передачи сообщений.Взгляните на libt2n или d-шина

Но если в прошлом вы использовали свою собственную реализацию сокета с хорошими результатами, я не вижу причин, по которым вам следует меняться.Если он не сломался, не чините его :)

Другие советы

Вместо просто прямых розеток вы могли бы рассмотрим такое решение, как AMQP.

Когда вы говорите об использовании сокет-соединений для интерфейса pub / sub, это обычно означает двухточечную связь, которая не всегда является масштабируемым решением.AMQP действительно решает проблему такого рода с пабом / субподрядчиком.Это бесплатно, с открытым исходным кодом, и это работает.

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

Я рекомендую OpenAMQ.

Тем не менее, это действительно зависит от того, в какой среде вы работаете.AMQP требует, чтобы брокер AMQP (приложение, отвечающее за маршрутизацию сообщений) был запущен где-то в системе.

Взгляните на ActiveMQ.Это JMS провайдер, а также имеет привязки на множестве других языков, работает на нескольких видах транспорта и имеет набор протоколов, которые он использует для своих сообщений.

RabbitMQ также является брокером AMQP, который поддерживает другие протоколы, такие как XMPP, HTTP, STOMP, SMTP, а также использует адаптеры.

Особенно, если вы делали это раньше, и это все еще соответствует вашим потребностям, придерживайтесь этого.

Как насчет встраивания веб-сервера в ваше приложение? EasyHTTPD имеет открытый исходный код на C ++ и довольно прост в использовании.Асинхронная часть достаточно проста.Вы либо создаете новый поток для отправителя, либо для получателя.

Если вы ищете XML и кроссплатформенность для загрузки, вы можете рассмотреть механизм XML-RPC, такой как SOAP (я использовал gSOAP для связи между сервером C в linux и клиентом C ++ в win32, и он отлично работал, как только вы во всем разобрались).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top