Как организовать обмен данными между приложениями?

Доброго времени суток!

Сразу оговорюсь - в гугле не забанили, просто хотелось бы получить совет подкрепленный личным опытом

Возможно, банальная проблема, конечно, но все же...

Есть, положим, 2 программы (2 процесса). Как организовать между ними обмен данными в рамках одной машины (можно и не ограничиваться)?
Пишу без конкретики потому как хотелось бы получить максимально универсальное решение. Т. е. например, есть на Delphi написанная программа; есть, скажем, сервер на Node.js; есть какая нибудь еще софтина - каким образом можно организовать обмен данными между этим разнородным зоопарком?

Когда задавался этим вопросом в последний раз - остановился на сокетах. С одной стороны это в моем понимании:
  • Легкий (в теории) переход от соединения 2 процессов в рамках 1 машины к соединению через сеть
  • Кроссплатформенность
  • Широкая поддержка этой технологии

Да и вообще сокеты вроде бы тут вполне подходят, однако меня беспокоит:
  • Не окажутся ли сокеты бутылочным горлошком в плане быстродействия?
  • Насколько это "костыльное" решение для межпроцессорного общения?
  • Какие есть альтернативы?
  • Вопрос задан
  • 10183 просмотра
Пригласить эксперта
Ответы на вопрос 5
@dmitryKovalskiy
программист средней руки
Решение в лоб - создать общий ресурс для всех приложений. К примеру xml или маленькая база SqlLite. И пусть обе апликухи оттуда читают. Или вы хотите именно взаимные "пинки" заставляющие что-то делать?
Ответ написан
@sitev_ru
sitev.ru - мой блог ...
Я за сокеты!
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
max-kuznetsov
@max-kuznetsov
Главный IT-архитектор
1. Не создавать зоопарк. Ни при каких условиях.
2. Не пытаться найти универсальное решение для всего на свете. Такое решение всегда избыточно, неповоротливо, несопровождаемо, а, главное, никому не понятно. Исходите из конкретных требований и применяйте архитектурные паттерны.
3. Существует много общепринятых технологий обмена данными между компьютерами или между процессами на одном компьютере. Можно реализовать сетевое взаимодействие на низком уровне. Можно использовать уже готовые решения (SOAP, например). Можно использовать посредников (иногда это единственный способ избавиться от влияния зоопарка, созданного другими людьми). Причём посредники тоже бывают разные. Опять-таки, смотрите конкретные требования и паттерны.
Ответ написан
Комментировать
leventov
@leventov
Насчет "самого универсального" решения - почитайте вот это: tammersaleh.com/posts/the-number-one-trait-of-a-gr...

Зависит от типа взаимодействия. Если это обмен сообщениями, это одно. Берите сокеты или очереди. Если перекачка однотипных данных из процесса в процесс - та же очередь. Если это какое-то более сложное разделяемое состояние, например динамическое множество онлайн-пользователей с какими-то ассоциированными данными (если речь о серверах зашла) - возьмите уже полноценную in-memory базу данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы