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

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

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

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

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

Ответы [ 8 ]

3 голосов
/ 11 марта 2009

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

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

1 голос
/ 14 марта 2009

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

1 голос
/ 11 марта 2009

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

1 голос
/ 11 марта 2009

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

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

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

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

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

0 голосов
/ 11 марта 2009

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

0 голосов
/ 11 марта 2009

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

0 голосов
/ 11 марта 2009

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

0 голосов
/ 11 марта 2009

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

...