Какой метод/библиотека IPC может взаимодействовать между разными языками?

Предположим, у меня есть приложение C++, которое будет считывать ввод с клавиатуры и выводить его на консоль всякий раз, когда нажимается символ. Поэтому, если я нажму «привет» (курсор не обязательно должен находиться в определенном окне), приложение будет последовательно печатать «h», «e», «l», «l», «o» (без необходимости «привет» завершить").

Я хотел бы отправить эту последовательность в другое приложение, написанное на другом языке, например C # в Unity или Python. Так что в некотором смысле C++ подобен серверу, который передает строки клиенту C#. И клиент должен получать каждый символ сразу же, как только C++ сгенерирует его. Клиент также должен иметь возможность отправлять текст на сервер. Например, команда, позволяющая серверу приостановить чтение ввода с клавиатуры на несколько секунд.

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

Итак, если у нас есть сервер, клиент C#, клиент python, оба клиента получат от сервера одну и ту же текстовую последовательность. И если клиент C# говорит серверу остановиться, клиент python также не получит текст.

ОС, на которой он должен работать, — Windows. Но если бы это работало и на Unix, и на Windows, то это было бы лучше.

Какой хороший подход к IPC соответствует всем моим требованиям?

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

Ответы (1)

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

Кроме того, для функции приостановки создайте (одноадресный) UDP-сокет, который прослушивает сервер и которому клиенты могут отправлять сообщения.

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

То, что отправляет сервер, может быть потеряно и хорошо. Но команда приостановить работу сервера должна быть надежной, поэтому я думаю, что было бы лучше использовать TCP. Могу ли я использовать в этом случае и UDP, и TCP?
Также можете ли вы дать мне ссылку на конкретный учебник / пример того, как реализовать многоадресную рассылку, о которой вы упомянули?
@ off99555 Конечно, вы также можете использовать TCP, но локально я не думаю, что возможна потеря пакетов. В чем может быть причина потери посылки? Запись учебные пособия: python stackoverflow.com/a/1151620/1319284 Java docs.oracle.com/javase/7/docs/api/java/net/MulticastSocket.html C++ gist.github.com/hostilefork/f7cae3dc33e7416f2dd25a402857b6c6 C# jarloo.com/c -udp-multicasting-tutorial По сути, я только что погуглил "[язык] udp multicast"