PHP实现web socket长链接流程详解(php做购物车)燃爆了

随心笔谈2年前发布 admin
193 0 0

文章摘要

本文描述了一个使用PHP和Socket编程实现WebSocket连接建立的示例代码。代码中使用`stream_socket_server`函数创建TCP连接,并通过`stream_socket_accept`函数接受客户端连接。在每次连接时,代码读取客户端数据并发送给客户端,同时打印握手信息以确认连接。代码中还涉及`preg_match`用于提取`Sec-WebSocket-Key`,并使用`sha1`和`base64`对密钥进行加密,构建并发送握手消息以完成 WebSocket 连接的建立。代码整体展示了如何通过简单的 socket 编程实现 WebSocket 接口的连接管理。

$socket=stream_socket_server(‘tcp://’.$ipServer.’:’.$portNumber, $errno, $errstr);
while($conn=@stream_socket_accept($socket,$nbSecondsIdle))
{
$message=fread($conn, 1024);
send($conn,$message);
//@todo
//连接成功,有要保持连接,用来接收客户端发送过来的数据包 这里可以把这个连接$conn 保存在内存当中,通过Select or Swoole 事件去loop
fputs ($conn, “OK\n”);
}
function send($socket,$buffer){
$Sec_WebSocket_Key=”;
if (\preg_match(“/Sec-WebSocket-Key: *(.*?)\r\n/i”, $buffer, $match)) {
$Sec_WebSocket_Key=$match[1];
}
$new_key=\base64_encode(\sha1($Sec_WebSocket_Key . “258EAFA5-E914-47DA-95CA-C5AB0DC85B11″, true));
$handshake_message=”HTTP/1.1 101 Switching Protocols\r\n”
.”Upgrade: websocket\r\n”
.”Sec-WebSocket-Version: 13\r\n”
.”Connection: Upgrade\r\n”
.”Sec-WebSocket-Accept: ” . $new_key . “\r\n”;
$handshake_message .=”\r\n”;
var_dump($handshake_message);//打印握手信息,然后发送给客户端,建立完整连接
//socket_write($socket,$handshake_message);
$len=@\fwrite($socket, $handshake_message);
return 0;
}

© 版权声明

相关文章