通过React Timer调用(Ratchet)WampServer方法

时间:2016-07-21 20:50:24

标签: php ratchet reactphp

我正在设置一个带棘轮的WampServer。是否有可能每30秒向循环添加一个调用WampServer方法的计时器?

我尝试过以下代码:

public function addMonitoringTimer(){

    $this->loop->addPeriodicTimer(30, function() {
        ...
        $this->wampServer->methodName();
        ...
    });

} 

但没有计时器似乎有用。

注意:由于此代码是一个类方法,$ this是对类对象的引用,该对象引用了WampServer($ this-> wampserver)和WampServer使用的循环($ this->循环)。我调用的方法不是WampServerInterface的一部分。

1 个答案:

答案 0 :(得分:-1)

假设Pusher是实现WampServerInterface的clas。我们在Pusher中定义onMessageToPush()的自定义(不是接口的一部分)方法。

class Pusher implements WampServerInterface {
    ...
    public function onMessageToPush(){
        ...
    }
    ...
}

现在,创建一个React循环:

$loop  = \React\EventLoop\Factory::create();

,我们设置了一个websocket服务器对象:

$webSock = new \React\Socket\Server($loop);
$webSock->listen($bindPort, $bindIp);

,我们创建了WampServer对象:

$pusher = new Pusher();
$wampServer = new \Ratchet\Wamp\WampServer(
    $pusher
);

我们使用上面的wamp服务器,web套接字和循环来设置I / O服务器:

$ioserver = new \Ratchet\Server\IoServer(
      new \Ratchet\Http\HttpServer(
        new \Ratchet\WebSocket\WsServer(
                $wampServer
            )
      ),
      $webSock,
    $loop
);

现在我们可以定义一个调用我们的自定义方法的计时器:

$loop->addPeriodicTimer(30, function() use ($pusher) {
        $message = "my message";
        $pusher->onMessageToPush($message);
});

对于可能对此感兴趣的每个人,我已经构建了一个示例,说明如何使用Ratchet实现某些功能,包括上述功能您可以在此处找到它:

Example of using Ratchet