¿Existe alguna manera de implementar lapatrón de publicación/suscripción¿Desde la línea de comando sin utilizar un proceso de servidor? Esto sólo necesita funcionar en una máquina.
Lo principal que quiero evitar al no tener un proceso de servidor es configurar una máquina para usar estas herramientas. También estoy muy interesado en no tener que lidiar con la posibilidad de que el proceso de mi servidor muera.|
Esto podría verse así:
# client 1
subscribe name | while read line; do echo $line; done
# client 2
subscribe name | while read line; do echo $line; done
# server
echo message | publish name
Enlaces relacionados
- POSIX ipcproporciona un servidorcola de mensajesy hay clientes de línea de comandos para ello(1) (2) (3). Esto podría usarse junto con algún tipo de almacenamiento de estado para implementar lo anterior.
- ZMQprovee unprotocolo para comunicación pub/sub. Existen herramientas de línea de comandos análogas aCarolina del NortePara usarZMQ, comozmcat. Estos podrían usarse para configurar un patrón mínimo de publicación/subdirección de línea de comandos.con un servidor.
- Linux proporciona otro mecanismo IPC llamadotuberías con nombre (cf mkfifo). No sé cuál es el comportamiento previsto con varios consumidores. Pero algunos experimentos iniciales sugieren que cada mensaje es sólorecibido por uno de los consumidores
Respuesta1
Todos los suscriptores deben ser notificados de los nuevos datos de una manera que no afecte a otros suscriptores y el servidor no debe tener que realizar un seguimiento de los datos que los suscriptores han recibido. Esto hace que FIFO sea inútil para este propósito. Irónicamente, un archivo normal hará exactamente lo que usted desea porque los descriptores de archivos en archivos normales realizan un seguimiento de los cambios del archivo. Puede combinar esto con sobrescritura, lo que garantiza que todos los cambios se publiquen antes de que se produzca una nueva sobrescritura, lo que significa que solo almacenará un mensaje.
touch pubsub
tail -f pubsub | while read line; do echo $line; done
tail -f pubsub | while read line; do echo $line; done
echo "message" | cat > pubsub
Obtendrá un "archivo truncado" en el error estándar, que es el comportamiento esperado, pero si no desea verlo, agregue 2> /dev/null
tail en realidad hace todo lo que lee y hace eco, pero está escrito así porque supongo que quieres incorporarlo en un script.