Сообщение не отправлено / получено после успешного рукопожатия в HTML 5 WebSocket и PHP Socket - PullRequest
0 голосов
/ 18 октября 2018

Я решил сделать онлайн-игру, поэтому по этой причине на стороне клиента я выбираю WebSocket API HTML 5, а на стороне сервера я выбираю PHP Socket *Расширение 1004 *.

Итак, для изучения этих двух технологий я решил провести небольшое исследование и создать несколько приложений, таких как простой чат, чтобы понять всю историю о том, как WebSocket подключен к PHP Socket.Итак, после изучения я создал простой PHP-сервер и клиент со следующими сценариями:

Я также скопировал и вставил некоторый код из Интернета, чтобы он работал, чтобы понять, как работает WebSocket иPHP Socket может использоваться вместе.

Клиентская сторона:

var websocket = new WebSocket('ws://localhost:2000/sockets/server.php');

websocket.onopen = e => {
    console.log('Connected.');
}

websocket.onmessage = e => {
    // Do something
    console.log(e.data);
}

$('#button').click(function(e){
    websocket.send('Hello World');
});

Серверная сторона:

<?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$bindSocket = socket_bind($socket,'localhost','2000');
$listenSocket = socket_listen($socket);

do{
    $acceptSocket = socket_accept($socket);
    $readSocket = socket_read($acceptSocket,10000);
    perform_handshaking($readSocket, $acceptSocket, 'localhost', '2000');
}while(true);
function perform_handshaking($receved_header,$client_conn, $host, $port){
    $headers = array();
    $lines = preg_split("/\r\n/", $receved_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')));
    //hand shaking header
    $upgrade  = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
    "Upgrade: websocket\r\n" .
    "Connection: Upgrade\r\n" .
    "WebSocket-Origin: $host\r\n" .
    "WebSocket-Location: ws://$host:$port/demo/shout.php\r\n".
    "Sec-WebSocket-Accept:$secAccept\r\n\r\n";
    socket_write($client_conn,$upgrade,strlen($upgrade));
}

Послеуспешное рукопожатие.Когда я нажимаю кнопку $('#button').click( ... ), ничего не происходит.Пожалуйста, кто-нибудь может помочь мне научить меня всем шагам, как правильно рукопожатие WebSocket и как начать общение, пожалуйста, все шаги только одним простым примером, потому что я учусь.Я буду рад и слишком благодарен.

Обмен другими ресурсами также поможет.

...