Erlang - Подключиться к уже запущенным внешним программам?
Я хотел бы подключить Erlang к внешней программе на C#. Я знаю, что есть разные способы сделать это: 1) использовать порты (предоставляемые OTP), 2) TCP/UDP/ сетевые сокеты, 3) os:cmd и т. Д. Опции 1 и 3 предполагают, что erlang запускает эти программы, и вариант 2 требует большой настройки, если вы просто хотите взаимодействовать с внешней программой.
Вопрос в следующем: позволяет ли erlang создавать порты и подключаться к уже запущенным программам? Я знаю, что это приводит к некоторым интересным проблемам безопасности, но идея звучит выполнимо, поэтому я подумал, что увижу, пытался ли кто-то сделать это раньше.
Спасибо
2 ответа
Это в основном только сокеты, которые вы можете использовать, или отображать некоторую общую память и получать к ней доступ через NIF или драйвер порта. Но разделяемая память не очень хороша для изоляции отказов.
Если возможно запустить вашу внешнюю программу в качестве порта, это даст вам преимущество автоматического перезапуска при контроле процесса владельца.
Еще одна возможность - использовать C-Node или, в вашем случае, может быть C# Node, т.е. говорить по протоколу распространения Erlangs из программ на разных языках.
Есть еще один вариант, который я лично не рекомендую, но он все еще там; CORBA http://www.erlang.org/doc/man/corba.html (Общая архитектура брокера запросов объектов).