Связь между приложениями, написанными на разных языках

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

Вопрос

Я смотрю на связывание нескольких приложений вместе (все написанные на разных языках, таких как C #, C ++, Python), и я не уверен, как идти об этом.

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

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

Комментарии / предложения будут оценены, спасибо!

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

Решение

Я лично бери понравился Ømq.. Отказ Это библиотека, которая имеет знакомый BSD-розеты, подобный интерфейсу, подобно прохождению сообщений, но вы обнаружите, что это реализует интересные узоры для распределения задач.

Похоже, вы хотите организовать несколько процессов в трубопроводе. Ømq позволяет сделать это, используя розетки нажима и опроса. (И впоследствии вы обнаружите, что даже возможно расширить несколько процессов и машин с небольшими усилиями.) Посмотрите на гид начать, и zmq_socket (3) Manpage специально для того, как работает толкание и тяги.

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

Что касается содержания сообщения, Ømq не касается этого, они просто блоки необработанных данных. Вы можете использовать любой формат, который подходит вам, например, JSON, или, возможно, Протокол буферы.

То, что я не уверен, это «контролирующее состояние», которое вы упоминаете. Вас интересует, например, отменив работу на полпути?

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

Для C # до C # вы можете использовать Фонд связи Windows. Отказ Вы можете использовать его с Python и C ++.

Вы также можете захотеть оформить заказ по именованным трубам.

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

Большинство внешнего программного обеспечения имеет проблемы со ссылкой на код C ++, из-за алгоритма Mangling Name, который он использует для его символов. По этой причине при взаимодействии с программами, написанными на других языках, часто лучше всего объявить обертки к вещам, как extern "C" или внутри Ан extern "C" { блокировать.

Мне нужно иметь возможность перенести данные, установленные из одного приложения в другое легко (наборы данных, находящиеся в вопросе, не являются огромными, вероятно, несколько мегабайт)

Используйте файловую систему.

И мне также нужна некоторая форма способа контролировать текущее состояние операции

Опять же, используйте файловую систему. Файл «Current_state.json» с сериализованным объектом JSON идеально подходит для работы с несколькими языками.

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

Возможно. Но это излишки для такого рода вещи. Ваша ОС уже есть все удобства, которые вам нужны. Просто используйте файловую систему. Это очень просто и очень надежно.

Есть много способов сделать интерпретирующую связь. Как вы сказали, розетки могут быть универсальным решением. Мыло, я думаю, несколько переплетет. Вы также можете использовать MailSlots. Я написал приложение C ++, используя его пару лет назад. Именные трубы могут также быть решением, но если вы кодируете в Windows, это может быть сложно.

По моему мнению:

  1. Розетки
  2. Mailslots.

Лучшие кандидаты.

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