我正在学习WebSocket,已经了解了如何进行握手。这段代码是没有SSL的握手,我在服务器上添加了SSL证书,但现在它不起作用:
$host = '176.xxx.xx.xx';
$port = 44444;
//Create TCP/IP sream socket and return the socket resource
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Bind the source address
socket_bind($socket, $host, $port);
// Listen to incoming connection
echo "listening\r\n";
socket_listen($socket);
// Accept new connections
$resource = socket_accept($socket);
echo $headers = socket_read($resource, 1024);
preg_match('/Sec-WebSocket-Key\: (.+?)\r\n/', $headers, $key);
$acceptKey = $key[1].'258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
$acceptKey = base64_encode(sha1($acceptKey, true));
$upgrade = "HTTP/1.1 101 Switching Protocols\r\n".
"Upgrade: websocket\r\n".
"Connection: Upgrade\r\n".
"Sec-WebSocket-Accept: $acceptKey".
"\r\n\r\n";
$r1 = socket_write($resource,$upgrade,strlen($upgrade));
socket_close($resource);
我知道这不是完美的代码 - 我可以自己改进它,但我不能自己解决SSL问题。所以请专注于解决这个问题。
我查找了很多内容,但只找到非常复杂的解决方案,而且我根本无法使用它们。我必须使用我的证书和私钥的.pem文件,但该如何将其添加到该套接字中呢?请不要给我使用node.js或socket.io的解决方案,它必须由PHP制作。此外,我更喜欢不使用任何复杂的类,因为我想了解基础知识并创建自己的类 - 这是因为我想为非常特定的问题使用WebSockets。
非常感谢!