Como vincular o soquete ZeroMQ à biblioteca de soquetes da web Ratchet para criar aplicativos em tempo real para aplicativos php?
Eu sou apenas um iniciante em toda essa área envolvendo websocket, Ratchet e ZeroMQ.
Para meu entendimento básico:
websocket
é algo que ajuda a criar uma conexão aberta entre servidor e cliente.
Ratchet
é uma biblioteca baseada em PHP que usa as principais funções de soquete do PHP para criar uma estrutura de soquete PHP, o que nos permite facilitar a programação de soquetes PHP.
ZeroMQ
é uma biblioteca de soquetes que ajuda o aplicativo que não é de catraca a (outro script PHP) a enviar os dados pelo Ratchet Socket e pelo Web-socket.
Estou seguindo o tutorial encontrado na catraca sobre 'olá mundo' e 'empurrador', mas ambos parecem incompletos e apenas ensinam como trabalhar apenas com o console. Também encontrei exemplo de catraca no github, mas não está devidamente documentado. Eu estava procurando por um exemplo completo (com uma página html dedicada e javascript)
Abaixo está o código no qual estou trabalhando: Este é um dos métodos do controlador para o qual estou fazendo uma solicitação do Ajax. Este método criará uma nova postagem (digamos). Quero atualizar a lista de postagens dinamicamente no navegador de vários clientes transmitindo / pressionando com a ajuda do ZeroMq.
Um método em um controlador:
public function create_new_post(){
// ------
// code to create a new post.
// -------
// After creating a post
$response = [
'new_post_title' => $title,
'post_id' => $id
];
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher');
$socket->connect("tcp://localhost:8000");
$socket->send(json_encode($response));
}
Arquivo de empurrador:
use Ratchet\ConnectionInterface;
use Ratchet\Wamp\WampServerInterface;
class Pusher implements WampServerInterface{
public function onPostEntry($data){
// Data that were sent by ZeroMQ through create_new_post() method
$entry_data = json_decode($data);
// AND AFTER THIS, I DONT HAVE CLUE OF WHAT TO DO NEXT !!
}
}
Shell Script para executar o servidor:
require dirname(__DIR__) . '/vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$pusher = new MyApp\Pusher;
// Listen for the web server to make a ZeroMQ push after an ajax request
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:8000');
$pull->on('message', array($pusher, 'onBidEntry'));
// Set up our WebSocket server for clients wanting real-time updates
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '0.0.0.0');
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
$loop->run();
O script de shell apenas informa que ele servirá na porta 8080, no entanto, como eu mencionaria minhas rotas. Digamos que eu quero a conexão aberta apenas na página 'mysite / allposts'. Além disso, qual seria o script que eu tenho que escrever no lado do cliente (um arquivo javascript) e como receber esses novos dados pelo lado do cliente atualizando um objeto DOM específico.