首页 > 解决方案 > 实例化期间未提供 React Loop

问题描述

我正在尝试使用棘轮/反应来在 PHP 中创建安全套接字。我看过很多指南和文档,但我仍然不知道为什么这不起作用。

require dirname(__DIR__) . '/composer/vendor/autoload.php';
ini_set('display_errors', 'On');
use ChatApp\Chat;

require "Chat.php";


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

$webSock = new React\Socket\Server('138.68.129.65:8443', $loop);
$webSock = new React\Socket\SecureServer($webSock, $loop, [
    'local_cert'        => 'absolute/path/to/cert.pem', // path to your cert
    'local_pk'          => 'absolute/path/to/to/key.pem', // path to your server private key
    'allow_self_signed' => TRUE, // Allow self signed certs (should be false in production)
    'verify_peer' => FALSE
]);

$webServer = new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new Chat()
        )
    ),
    $webSock
);

 $webServer->run();

这是代码,错误在第 70 行的 IoServer.php

public function run() {
        if (null === $this->loop) {
            throw new \RuntimeException("A React Loop was not provided during instantiation");
        }

        // @codeCoverageIgnoreStart
        $this->loop->run();
        // @codeCoverageIgnoreEnd
    }

我检查了我的代码中的循环是否为空,但没有

标签: phpratchet

解决方案


看来我从同一来源复制了相同的代码

在快速浏览源代码后,我发现您应该向 IoServer 构造函数添加第三个参数。所以最终的工作代码是:

require dirname(__DIR__) . '/composer/vendor/autoload.php';
ini_set('display_errors', 'On');
use ChatApp\Chat;

require "Chat.php";


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

$webSock = new React\Socket\Server('138.68.129.65:8443', $loop);
$webSock = new React\Socket\SecureServer($webSock, $loop, [
    'local_cert'        => 'absolute/path/to/cert.pem', // path to your cert
    'local_pk'          => 'absolute/path/to/to/key.pem', // path to your server private key
    'allow_self_signed' => TRUE, // Allow self signed certs (should be false in production)
    'verify_peer' => FALSE
]);

$webServer = new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new Chat()
        )
    ),
    $webSock,
    $loop /** <--- here is the missing part */
);

 $webServer->run();

推荐阅读