1

我正在使用 Ratchet 设置 WampServer。是否可以在循环中添加一个每 30 秒调用一次 WampServer 方法的计时器?

我尝试了以下代码:

public function addMonitoringTimer(){

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

} 

但似乎没有计时器起作用。

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

4

1 回答 1

-1

假设 Pusher 是实现 WampServerInterface 的类。我们在 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 实现一些功能,包括上述功能,您可以在此处找到它:

使用棘轮的示例

于 2016-11-20T10:20:37.253 回答