PHP Websocket客户端+ ssl

时间:2014-08-18 10:24:48

标签: php ssl websocket client

有一个PHP Websocket客户端:https://github.com/symbiose/php-websocket-client存储库。它适用于不安全的连接。

我需要的是通过安全连接从php代码连接到websocket服务器。为了实现这个任务,我采用了上面的代码并对其进行了一些修改。 WebSocketClient的connect()方法现在在我的代码中看起来像这样:

public function connect()
{
    $root = $this;
    if ($this->getPort() == 443) {
      $context = stream_context_create();
      stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
      stream_context_set_option($context, 'ssl', 'verify_peer', false);
      $client = stream_socket_client("tls://{$this->getHost()}:{$this->getPort()}", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
    } else {
      $client = stream_socket_client("tcp://{$this->getHost()}:{$this->getPort()}", $errno, $errstr);
    }
    if (!$client) {
        throw new RuntimeException('Cannot connect to socket ([#'.$errno.'] '.$errstr.')');
    }
    $this->setSocket(new Connection($client, $this->getLoop()));
    $this->getSocket()->on('data', function ($data) use ($root) {
        $data = $root->parseIncomingRaw($data);
        $root->parseData($data);
    });
    $this->getSocket()->write($this->createHeader());
    return $this;
}

结果我几乎设法连接到服务器。 Websocket服务器看到了我的连接,回复说一切正常并将其写入日志。

但不幸的是,图书馆不明白,它已成功连接到服务器。

这个“如果”:

    if (base64_encode(pack('H*', sha1($this->key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'))) === $response['Sec-Websocket-Accept']) {
        $this->connected = true;
    } 

永远不会被执行。所以我无法建立连接。

我还可以确认,如果我们使用80端口 - 一切都像魅力一样。

所以如果你对为什么会发生这种情况有任何想法,我真的很感激他们。因为我已经没有想法了。

祝你好运, 克斯特亚

0 个答案:

没有答案