Публикуйте для подписанных клиентов в запланированное время с помощью richphp или ratchet

Я новичок в reactphp. Я попробовал node.js. Я изучаю проект, который требует, чтобы события запускались в определенное время и публиковались для подписанных клиентов. Подходит ли для этого EventLoop? Есть какие-нибудь указания, как я могу подойти к этому?


person Alan Quigley    schedule 14.03.2014    source источник


Ответы (1)


Ваше предположение об использовании React EventLoop верно. Вы можете использовать периодический таймер для запуска отправки сообщений. Поскольку вы упомянули Ratchet и опубликовали + подписаться, я предполагаю, что вы делаете это с помощью WAMP через WebSockets. Вот пример кода:

<?php
use Ratchet\ConnectionInterface;

class MyApp implements \Ratchet\Wamp\WampServerInterface {
    protected $subscribedTopics = array();

    public function onSubscribe(ConnectionInterface $conn, $topic) {
        // When a visitor subscribes to a topic link the Topic object in a  lookup array
        if (!array_key_exists($topic->getId(), $this->subscribedTopics)) {
            $this->subscribedTopics[$topic->getId()] = $topic;
        }
    }
    public function onUnSubscribe(ConnectionInterface $conn, $topic) {}
    public function onOpen(ConnectionInterface $conn) {}
    public function onClose(ConnectionInterface $conn) {}
    public function onCall(ConnectionInterface $conn, $id, $topic, array $params) {}
    public function onPublish(ConnectionInterface $conn, $topic, $event, array $exclude, array $eligible) {}
    public function onError(ConnectionInterface $conn, \Exception $e) {}

    public function doMyBroadcast($topic, $msg) {
        if (array_key_exists($topic, $this->subscribedTopics)) {
            $this->subscribedTopics[$topic]->broadcast($msg);
        }
    }
}

    $myApp = new MyApp;
    $loop = \React\EventLoop\Factory::create();
    $app = new \Ratchet\App('localhost', 8080, '127.0.0.1', $loop);
    $app->route('/my-endpoint', $myApp);

    // Every 5 seconds send "Hello subscribers!" to everyone subscribed to the "theTopicToSendTo" topic/channel
    $loop->addPeriodicTimer(5, function($timer) use ($myApp) {
        $myApp->doMyBroadcast('theTopicToSendTo', 'Hello subscribers!');
    });

    $app->run();
person cboden    schedule 18.05.2014
comment
Если клиент публикует информацию в теме, как я могу получить данные в методе onPublish ()? Я использую authobhan js - person Ravi Soni; 06.10.2015
comment
conn.publish ('kittensCategory', ['Привет, мир!']); Как мне получить привет мир в методе onPublish на сервере - person Ravi Soni; 06.10.2015