Chat: Broker
1Introdução
O broker é um programa executado em segundo plano, cujo papel é receber as novas mensagens enviadas ao servidor (por meio do controlador Message) e transmiti-las a todos os navegadores conectados (por meio do controlador Event).
Mais precisamente, esse programa é um script de linha de comando gerenciado pelo Comma. Scripts CLI são escritos da mesma forma que os controladores web, com apenas algumas particularidades específicas.
2Código-fonte
Aqui está o código do arquivo cli/Broker.php:
<?php
/** Controlador do script broker. */
class Broker extends \Temma\Web\Controller {
/** Ação principal. */
public function run() {
// ativação do socket
$this->zmq_broker_pub->connect();
// laço infinito
while (true) {
// lê uma nova mensagem enviada pelo controlador Message
$msg = $this->zmq_broker_pull[''];
// envia a mensagem para os controladores Event
$this->zmq_broker_pub[''] = $msg;
}
}
}
- Linha 4: definição do controlador Broker.
- Linha 6: definição da ação run().
- Linha 8: abertura explícita do socket ZeroMQ PUB (publicação). Normalmente isso não é necessário; os sockets ZeroMQ são abertos quando usados pela primeira vez. Neste caso, isso é necessário para que os controladores Event que tentarem se conectar a ele encontrem um socket que aceite conexões.
- Linha 10: laço infinito.
- Linha 12: leitura bloqueante no socket ZeroMQ PULL. O Temma lê e grava as fontes de dados como se fossem arrays associativos. Aqui, a chave é uma string vazia.
- Linha 14: grava no socket ZeroMQ PUB a mensagem que acabou de ser recebida. Aqui também, a fonte de dados é manipulada como se fosse um array associativo, com uma string vazia como chave.
3Execução
O script é simplesmente iniciado com o comando:
$ bin/comma Broker run
3.1Início automático
Para garantir que o script seja executado automaticamente quando o servidor for iniciado, você pode usar o sistema init do Linux.
Para isso, basta criar um arquivo /etc/init.d/broker:
#!/bin/sh
/caminho/para/aplicacao/bin/comma Broker run
Não se esqueça de conceder permissão de execução ao script:
$ sudo chmod +x /etc/init.d/broker
Por fim, configure o script para ser executado na inicialização:
$ sudo update-rc.d broker start 01 2 .
3.2Reinício automático
É importante que o broker seja executado continuamente; caso contrário, as mensagens não serão enviadas a todos os usuários conectados.
O método de início automático explicado acima tem a vantagem de ser simples, mas, se o broker parar de funcionar
por qualquer motivo, ele não será reiniciado automaticamente.
Existem várias soluções possíveis, mas uma das mais simples é usar o Supervisor.
Para instalar o Supervisor no Debian/Ubuntu:
$ sudo apt install supervisor
Em seguida, crie um arquivo /etc/supervisor/conf.d/broker.conf:
[program:broker]
command=/path/to/application/bin/comma Broker run
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/broker.log
stderr_logfile=/var/log/supervisor/broker-err.log
- Linha 1: início da configuração do programa broker.
- Linha 2: informe o caminho do programa a ser executado.
- Linha 3: pede ao Supervisor para iniciar o programa automaticamente na inicialização.
- Linha 4: pede ao Supervisor para reiniciar o programa caso ele seja interrompido.
- Linha 5: caminho do arquivo de log para o qual será redirecionada a saída padrão do programa.
- Linha 6: caminho do arquivo de log para o qual será redirecionada a saída de erro do programa.
Para que o Supervisor leve em conta esse arquivo de configuração:
$ sudo supervisorctl reread
$ sudo supervisorctl update
Em seguida, você pode controlar a execução do programa com os seguintes comandos (respectivamente para iniciar, parar e reiniciar o programa):
$ sudo supervisorctl start broker
$ sudo supervisorctl stop broker
$ sudo supervisorctl restart broker