PHP Ошибка Websocket: ошибка во время рукопожатия WebSocket: net :: ERR_CONNECTION_CLOSED (анонимно) - PullRequest
0 голосов
/ 29 марта 2020

Я изучаю веб-сокет за PHP, но я не знаю, почему произошла ошибка рукопожатия.

Мой клиент. html:

<html>
<body>
    <div id="root"></div>
    <script>
        var host = 'ws://127.0.0.1:8020/';
        var socket = new WebSocket(host);
        socket.onmessage = function(e) {
            console.log(e.data)
        };
    </script>
</body>
</html>

И сервер. php:

<?php

$address = "127.0.0.1";
$port = 8020;

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,$address,$port) or die('bind error');
socket_listen($socket) or die('listen error');
$client = socket_accept($socket) or die('accept error');

$socketread = socket_read($client,5000) or die('Failed to read');

preg_match("#Sec-WebSocket-Key: (.*)\r\n#",$socketread,$match);
$key = base64_encode(sha1($match[1].'258EAFA5-E914-47DA-95CA-C5AB0DC85B11',true));

$header = "HTTP/1.1 101 Switching Protocols\r\n";
$header .= "Upgrade: websocket\r\n";
$header .= "Connection: Upgrade\r\n";
$header .= "Sec-WebSocket-Accept: $key\r\n";
$header .= "Sec-WebSocket-Version: 13\r\n";

var_dump($header);
socket_write($client,$header,strlen($header));


$msg = "connected";
socket_write($client,$msg,strlen($msg));
socket_close($socket);

Однако я следовал документации Mozilla по рукопожатию: /

Спасибо за это.

1 Ответ

0 голосов
/ 29 марта 2020

Тем не менее, я следовал документации Mozilla по рукопожатию: /

Хотя это может быть, вы предполагаете, основываясь на вашем коде, что только рукопожатие в начале необходимо и что вы можете просто используйте простую розетку напрямую. Но на самом деле WebSockets имеют свою собственную структуру сообщений, а также маскирование полезной нагрузки, которую вам также необходимо реализовать. Подробнее см. фактический стандарт .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...