【问题标题】:Using Ratchet WsServer in combination with React SecureServer (WSS / SSL)将 Ratchet WsServer 与 React SecureServer (WSS / SSL) 结合使用
【发布时间】:2017-12-27 13:59:43
【问题描述】:

我们正在尝试通过安全连接 (WSS) 实现 websockets,并在我们的项目中实现了 cboden/ratchet。一切正常,正常连接。查看文档和 Github 项目页面,似乎新的 React SecureServer 类尚未在 Ratchet 中实现。

在我们找到a post about it 的问题中,直到以后的版本才支持它,但是,我们现在需要它:D 在问题报告中,他们建议将新的 React SecureServer 类与 Ratchet 类结合使用。我们尝试并遇到了一个致命错误:

Catchable fatal error: Argument 1 passed to React\Socket\SecureServer::__construct() must be an instance of React\Socket\Server, instance of Ratchet\Http\HttpServer given.

出错的部分:

$webServer = new Ratchet\Server\IoServer(
    new React\Socket\SecureServer( // Using React class here as suggested
        new Ratchet\Http\HttpServer(
            new Ratchet\WebSocket\WsServer(
                new Ratchet\Wamp\WampServer(
                    $pusher
                )
            )
        )
    ),
    $webSock, 
    array(
        'local_cert' => 'xxxx.pem',
        'allow_self_signed' => true,
        'verify_peer' => false
    )
);

我们在做傻事吗? :p

【问题讨论】:

    标签: ssl ratchet reactphp


    【解决方案1】:

    安全服务器应该包裹在套接字服务器上,而不是 HTTP 服务器:

      $webServer = new Ratchet\Server\IoServer(
        new Ratchet\Http\HttpServer(
            new Ratchet\WebSocket\WsServer(
              new Ratchet\Wamp\WampServer(
                $pusher
              )
            )
          )
        ),
        new React\Socket\SecureServer( // Using React class here as suggested
          $webSock,
          $loop,
          array(
            'local_cert' => 'xxxx.pem',
            'allow_self_signed' => true,
            'verify_peer' => false
          )
        )
      );
    

    【讨论】:

    • 好的,谢谢回复。现在我在第二个参数上遇到错误:Catchable fatal error: Argument 2 passed to React\Socket\SecureServer::__construct() must implement interface React\EventLoop\LoopInterface, instance of React\ZMQ\Context given
    • 我假设 $loop 是您存储事件循环的变量,所以无论您将它存储在哪个变量中,都可以在其中使用它。
    • 啊,是的,我尝试使用 $context,因为我认为它返回了 $loop 实例。服务器现在似乎再次运行...浏览器无法连接。我们得到一个SSL_ERROR_NO_CYPHER_OVERLAP 错误代码。有没有办法指定使用哪种类型的加密?
    • SecureServer支持所有PHP的ssl context options
    • 呃,我看到有一个密码选项。不确定要设置哪一个而不是 ALL :D
    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多