Chat: Broker
1Introducción
El broker es un programa que se ejecuta en segundo plano, cuyo papel es recibir los nuevos mensajes enviados al servidor (a través del controlador Message) y transmitirlos a todos los navegadores conectados (a través del controlador Event).
Más precisamente, este programa es un script de línea de comandos gestionado por Comma. Los scripts CLI se escriben de la misma manera que los controladores web, con solo algunas particularidades específicas.
2Código fuente
Aquí está el código del archivo cli/Broker.php:
<?php
/** Controlador del script broker. */
class Broker extends \Temma\Web\Controller {
/** Acción principal. */
public function run() {
// activación del socket
$this->zmq_broker_pub->connect();
// bucle infinito
while (true) {
// lee un nuevo mensaje enviado por el controlador Message
$msg = $this->zmq_broker_pull[''];
// envía el mensaje a los controladores Event
$this->zmq_broker_pub[''] = $msg;
}
}
}
- Línea 4: definición del controlador Broker.
- Línea 6: definición de la acción run().
- Línea 8: apertura explícita del socket ZeroMQ PUB (publicación). Normalmente esto no es necesario; los sockets ZeroMQ se abren cuando se usan por primera vez. En este caso, es necesario para que los controladores Event que intenten conectarse a él encuentren un socket que acepte conexiones.
- Línea 10: bucle infinito.
- Línea 12: lectura bloqueante en el socket ZeroMQ PULL. Temma lee y escribe las fuentes de datos como si fueran arrays asociativos. Aquí, la clave es una cadena vacía.
- Línea 14: escribe en el socket ZeroMQ PUB el mensaje que se acaba de recibir. Aquí también, la fuente de datos se manipula como si fuera un array asociativo, con una cadena vacía como clave.
3Ejecución
El script se lanza simplemente con el comando:
$ bin/comma Broker run
3.1Inicio automático
Para asegurarte de que el script se ejecute automáticamente cuando se inicie el servidor, puedes usar el sistema init de Linux.
Para ello, basta con crear un archivo /etc/init.d/broker:
#!/bin/sh
/ruta/a/aplicacion/bin/comma Broker run
No olvides dar permisos de ejecución al script:
$ sudo chmod +x /etc/init.d/broker
Por último, configura el script para que se ejecute en el arranque:
$ sudo update-rc.d broker start 01 2 .
3.2Reinicio automático
Es importante que el broker se ejecute de forma continua; de lo contrario, los mensajes no se enviarán a todos los usuarios conectados.
El método de inicio automático explicado anteriormente tiene la ventaja de ser simple, pero si el broker deja de funcionar − por el
motivo que sea − no se reiniciará automáticamente.
Hay varias soluciones posibles, pero una de las más simples es usar Supervisor.
Para instalar Supervisor en Debian/Ubuntu:
$ sudo apt install supervisor
A continuación, crea un archivo /etc/supervisor/conf.d/broker.conf:
[program:broker]
command=/ruta/a/aplicacion/bin/comma Broker run
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/broker.log
stderr_logfile=/var/log/supervisor/broker-err.log
- Línea 1: inicio de la configuración del programa broker.
- Línea 2: indica la ruta al programa que se debe ejecutar.
- Línea 3: se le pide a Supervisor que lance el programa automáticamente al arrancar.
- Línea 4: le pide a Supervisor que reinicie el programa si se interrumpe.
- Línea 5: ruta del archivo de log al que se redirigirá la salida estándar del programa.
- Línea 6: ruta del archivo de log al que se redirigirá la salida de error del programa.
Para que Supervisor tenga en cuenta este archivo de configuración:
$ sudo supervisorctl reread
$ sudo supervisorctl update
A continuación, puedes controlar la ejecución del programa con los siguientes comandos (para iniciarlo, detenerlo y reiniciarlo, respectivamente):
$ sudo supervisorctl start broker
$ sudo supervisorctl stop broker
$ sudo supervisorctl restart broker