Предположим, у меня есть приложение C++, которое будет считывать ввод с клавиатуры и выводить его на консоль всякий раз, когда нажимается символ. Поэтому, если я нажму «привет» (курсор не обязательно должен находиться в определенном окне), приложение будет последовательно печатать «h», «e», «l», «l», «o» (без необходимости «привет» завершить").
Я хотел бы отправить эту последовательность в другое приложение, написанное на другом языке, например C # в Unity или Python. Так что в некотором смысле C++ подобен серверу, который передает строки клиенту C#. И клиент должен получать каждый символ сразу же, как только C++ сгенерирует его. Клиент также должен иметь возможность отправлять текст на сервер. Например, команда, позволяющая серверу приостановить чтение ввода с клавиатуры на несколько секунд.
Я думаю, что это должна быть проблема IPC (межпроцессного взаимодействия), потому что клиент будет находиться на той же машине, что и сервер. У нас может быть несколько клиентов на одной машине, которая подключается к одному и тому же серверу.
Итак, если у нас есть сервер, клиент C#, клиент python, оба клиента получат от сервера одну и ту же текстовую последовательность. И если клиент C# говорит серверу остановиться, клиент python также не получит текст.
ОС, на которой он должен работать, — Windows. Но если бы это работало и на Unix, и на Windows, то это было бы лучше.
Какой хороший подход к IPC соответствует всем моим требованиям?
PS. В реальном случае я бы отправлял клиенту строку из 1000 символов 100 раз в секунду вместо отправки нажатий клавиш. Но это все равно будет очень маленькая сумма, потому что она находится на том же компьютере.
Сервер может использовать многоадресную рассылку UDP для публикации символов, таким образом, ему не нужно заботиться о том, что именно слушают клиенты. Клиентам просто нужно зарегистрироваться в группе многоадресной рассылки и слушать, что отправляет сервер.
Кроме того, для функции приостановки создайте (одноадресный) UDP-сокет, который прослушивает сервер и которому клиенты могут отправлять сообщения.
Вы можете быть уверены, что UDP поддерживается всеми необходимыми вам языками, а накладные расходы также невелики. Конечно, могут быть лучшие подходы для простого IPC, такого как тот, который не нуждается в сетевом стеке, но использование UDP просто, вы легко найдете документацию.
off99555
off99555
кутчкем