2009-03-11 2 views
3

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

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

Edit: я не принял решение еще, но я заинтересован в комментарии cparcode на Protobuf:.

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

+0

Ummm ... разъемы изначально asynch? возможно, в параллельной вселенной? – dkretz

+0

все современные библиотеки сокетов имеют асинхронные API – Javier

+0

Что следует учитывать: производительность синтаксического анализа XML, накладные расходы на постоянную память сокетов и т. Д. Но, как и другие, если вы сделали это в прошлом, то вы можете сделать это снова. Было бы неплохо подробно описать ваши другие требования: сколько машин в сети? Существуют ли первоочередные требования? – slacy

ответ

3

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

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

+0

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

+0

+1 на protobuf. гораздо компактнее, чем любой текстовый формат, а простой в использовании API для C++, Java и Python обеспечивает интероперабельность. – Javier

+0

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

0

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

+0

, но теперь, когда он знает, как это сделать, он думает об улучшении. – Javier

1

Вместо прямых розетки вы можете consider a solution like AMQP.

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

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

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

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

0

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

0

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

1

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

0

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

1

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

Смежные вопросы