Ошибка подключения рукопожатия Websocket в PHP - PullRequest
0 голосов
/ 02 июля 2018

Ошибка отображения в консоли: подключение к WebSocket Ошибка ws: //localhost/socket/php-socket.php/wss: ошибка во время Рукопожатие WebSocket: Неожиданный код ответа: 200

PHP код:

    $newSocket = socket_accept($socketResource);
    $clientSocketArray[] = $newSocket;

    $header = socket_read($newSocket, 1024);
    $chatHandler->doHandshake($header, $newSocket, HOST_NAME, PORT);
enter code here

Функция рукопожатия:

function doHandshake($received_header,$client_socket_resource, $host_name, $port) {
    $headers = array();
    $lines = preg_split("/\r\n/", $received_header);
    foreach($lines as $line)
    {
        $line = chop($line);
        if(preg_match('/\A(\S+): (.*)\z/', $line, $matches))
        {
            $headers[$matches[1]] = $matches[2];
        }
    }

    $secKey = $headers['Sec-WebSocket-Key'];
    $secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
    $buffer  = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
    "Upgrade: websocket\r\n" .
    "Connection: Upgrade\r\n" .
    "WebSocket-Origin: $host_name\r\n" .
    "WebSocket-Location: ws://$host_name:$port/demo/shout.php\r\n".
    "Sec-WebSocket-Accept:$secAccept\r\n\r\n";
    socket_write($client_socket_resource,$buffer,strlen($buffer));
}

код Javascript:

    var websocket = new WebSocket("ws://localhost/socket/php-socket.php"); 
    websocket.onopen = function(event) { 
        showMessage("<div class='chat-connection-ack'>Connection is established!</div>");       
    }
...