Я решил сделать онлайн-игру, поэтому по этой причине на стороне клиента я выбираю 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 и как начать общение, пожалуйста, все шаги только одним простым примером, потому что я учусь.Я буду рад и слишком благодарен.
Обмен другими ресурсами также поможет.