2017-12-27 369 views
0

我们正试图通过安全连接(WSS)实现websocket,并在我们的项目中实现了cboden/ratchet。所有Works正常连接罚款。环顾文档和Github项目页面,似乎新的React SecureServer类尚未在Ratchet中实现。将Ratchet WsServer与React SecureServer结合使用(WSS/SSL)

在我们发现的问题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

回答

0

安全服务器应该围绕插座服务器要包装,而不是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 
    ) 
    ) 
); 
+0

好的,Thx的响应。现在我收到第二个参数的错误:'可捕获的致命错误:传递给React \ Socket \ SecureServer :: __ construct()的参数2必须实现接口React \ EventLoop \ LoopInterface,React \ ZMQ \ Context的实例' – Brainfeeder

+1

I假设'$ loop'是你存储事件循环的变量,所以你存储哪个变量,在那里使用它。 – WyriHaximus

+0

啊,是的,我尝试使用$上下文,因为我认为它返回$循环实例。 服务器似乎现在再次运行...浏览器无法连接。我们收到一个'SSL_ERROR_NO_CYPHER_OVERLAP'错误代码。有没有办法指定使用哪种类型的加密? – Brainfeeder