Как связать сокет ZeroMQ с библиотекой веб-сокетов Ratchet, чтобы создать приложение реального времени для приложения php?

Я всего лишь новичок во всей этой области, включая websocket, Ratchet и ZeroMQ.

Насколько я понимаю:

websocket это то, что помогает создать открытое соединение между сервером и клиентом.

Ratchet является библиотекой на основе PHP, которая использует основные функции Socket PHP для создания фреймворка сокетов PHP, позволяющего упростить программирование сокетов PHP.

ZeroMQ это библиотека сокетов, которая помогает не храповому приложению (другому скрипту PHP) отправлять данные через Ratchet Socket и веб-сокет.

Я следую обучающему руководству об «привет мире» и «толкателе», которое встречается в трещотке, но оба они кажутся неполными и учит только тому, как работать только с консолью. Я также нашел храповой пример в github, но он не задокументирован должным образом. Я искал полный пример (с выделенной HTML-страницей и JavaScript)

Ниже приведен код, над которым я работаю: это один из методов контроллера, для которого я делаю запрос Ajax. Этот метод создаст новый пост (скажем). Я хочу обновлять список сообщений динамически в браузере нескольких клиентов путем трансляции / отправки с помощью ZeroMq.

Метод в контроллере:

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));

}

Файл толкателя:

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 для запуска сервера:

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();

Сценарий оболочки только говорит, что он будет работать в порту 8080, однако, как бы я упомянул мои маршруты. Допустим, я хочу открыть соединение только на странице «mysite / allposts». Кроме того, что будет сценарий, который я должен написать на стороне клиента (файл javascript) и как получить эти новые данные путем обновления на стороне клиента конкретного объекта DOM.

Ответы на вопрос(1)

Ваш ответ на вопрос