【问题标题】:A React Loop was not provided during instantiation实例化期间未提供 React Loop
【发布时间】:2020-03-05 04:10:17
【问题描述】:

我正在尝试使用棘轮/React 来在 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
    }

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

【问题讨论】:

    标签: php ratchet


    【解决方案1】:

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

    在快速浏览源代码后,我发现您应该在 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();
    

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 1970-01-01
      • 2017-08-15
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2020-01-17
      • 2018-10-25
      相关资源
      最近更新 更多