¿Qué método/biblioteca de IPC puede comunicarse entre diferentes idiomas?

Supongamos que tengo una aplicación C++ que lee las entradas del teclado y las imprime en la consola cada vez que se presiona un carácter. Entonces, si presiono "hola" (sin que el cursor tenga que estar en una ventana específica), la aplicación imprimirá "h", "e", "l", "l", "o" secuencialmente (sin necesidad de "hola" completar").

Me gustaría enviar esta secuencia a otra aplicación que esté escrita en otro idioma, por ejemplo, C# en Unity o Python. Entonces, en cierto sentido, C ++ es como un servidor que transmite cadenas a un cliente C #. Y el cliente debería recibir cada carácter inmediatamente tan pronto como C++ lo genere. El cliente también debería poder enviar algún texto al servidor. Por ejemplo, comando para decirle al servidor que pause la lectura de las entradas del teclado durante unos segundos.

Estoy pensando que esto debería ser un problema de IPC (comunicación entre procesos) porque el cliente estará en la misma máquina que el servidor. Podemos tener varios clientes en la misma máquina que se conecta al mismo servidor.

Entonces, si tenemos un servidor, un cliente C#, un cliente python, ambos clientes recibirían la misma secuencia de texto del servidor. Y si el cliente de C# le dice al servidor que se detenga, el cliente de Python tampoco recibirá el texto.

El sistema operativo en el que debería funcionar es Windows. Pero si funcionaría tanto en Unix como en Windows, entonces sería mejor.

¿Cuál es un buen enfoque de IPC que se ajusta a todos mis requisitos?

PD. En un caso de uso real, enviaría una cadena de 1000 caracteres 100 veces por segundo al cliente en lugar de enviar pulsaciones de teclas. Pero aún sería una cantidad muy pequeña porque está en la misma computadora.

Respuestas (1)

El servidor puede usar la multidifusión UDP para publicar los caracteres, de esa manera no necesita preocuparse por lo que los clientes están escuchando exactamente. Los clientes solo necesitan registrarse en el grupo de multidifusión y escuchar lo que envía el servidor.

Además, para la función de pausa, cree un socket UDP (unicast) que el servidor esté escuchando y al que los clientes puedan enviar un mensaje.

Puede estar seguro de que UDP es compatible con todos los idiomas que necesita, y la sobrecarga también es baja. Claro que puede haber mejores enfoques para IPC simple como ese que no necesita la pila de red, pero usar UDP es simple, encontrará documentación fácilmente.

Lo que envía el servidor se puede perder y multar. Pero el comando para pausar el servidor debe ser confiable, por lo que creo que sería mejor usar TCP. ¿Puedo usar UDP y TCP en este caso?
¿También puede darme un tutorial específico/enlace de ejemplo de cómo implementar las cosas de multidifusión que mencionó?
@ off99555 Claro que también puede usar TCP, pero localmente no creo que pueda haber pérdida de paquetes. ¿Cuál sería el motivo de la pérdida del paquete? escritura tutoriales: 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 Básicamente busqué en Google "[idioma] udp multicast"