La multidifusión UDP proporciona un mecanismo para la comunicación de uno a muchos en una red. A diferencia de la radiodifusión, una multidifusión sólo puede ser recibida por aquellos suscritos a la dirección de multidifusión particular de interés. Esta aplicación implementa una sala de chat básica multidifusión a través de una red de área local.
Precaución
Todos los mensajes de la sala de chat se envían a través de canales de multidifusión UDP no cifrados .
Para la interfaz de usuario, este proyecto utiliza el marco egui. En el back-end, el tiempo de ejecución de Tokio impulsa todas las cargas de trabajo asincrónicas: redes, sincronización y programación de tareas.
El hilo principal ejecuta la lógica de la interfaz de usuario. En un hilo de red separado, el tiempo de ejecución de Tokio maneja los mensajes entrantes y salientes. La información se transmite entre los dos hilos a través de canales.
Al inicio, el back-end de la red inicializa un socket que se vincula a 0.0.0.0:3000
. Luego, el socket se une a la dirección de multidifusión 224.0.0.69:3000
. Para evitar que varias instancias de la aplicación se vinculen a la misma dirección (en el mismo dispositivo), el indicador SO_REUSEADDR
está deshabilitado. Todos estos valores se pueden modificar a través de la interfaz de línea de comandos.
Usage: udp-multicast-chat [-a <addr>] [-p <port>] [--reuse]
Networking options.
Options:
-a, --addr multicast address that the socket must join
-p, --port specific port to bind the socket to
--reuse whether or not to allow the UDP socket to be reused by
another application
--help display usage information
Para ejecutar el servidor
# Bind to `0.0.0.0:3000`, then join the multicast address
# `224.0.0.69:3000`, and launch the user interface.
cargo run --release -- --addr 224.0.0.69 --port 3000