2017-12-27 371 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