Home >Backend Development >PHP Problem >How to build a websocket environment in php
How to build a websocket environment in php: 1. Find the sockets extension in the php.ini file and delete the semicolon in front of it; 2. Upgrade http to websocket; 3. Configure environment variables and install PHP Add the path to Path; 4. Enter "php Path" in cmd.
The operating environment of this tutorial: Windows 7 system, PHP version 8.1, Dell G3 computer.
How to set up a websocket environment in php?
PHP creates websocket server
To create this server, you need to enable the sockets extension first. If it is not enabled, an error will be reported no matter what
You only need to find the sockets extension in the php.ini file and delete the semicolon in front of it to open it
Before opening:
;extension=sockets
After opening:
extension=sockets
Opening Finished, then we can get to the point; first, we understand a few functions:
socket_create(AF_INET, SOCK_STREAM, SOL_TCP);//用于创建套接字 socket_bind( $this->master,$ip,$port);//用于绑定ip和端口 socket_listen( $this->master,1000);//用于调用connect连接的套接字和监听相关端口 socket_accept($this->master);//负责握手连接 socket_recv($socket, $buffer, 1024, 0);//从已连接的socket(客户端)接收数据 socket_write($socket,$upgrade,strlen($upgrade));//给单独客户端发送数据 send($message)//发送数据 socket_close($socket);//断开连接
Many steps are similar to creating a socket in PHP,
The main difference lies in the use of socket_write and the need to solve the data. To seal the frame, we need to upgrade http to websocket
Upgrade http to websocket
if(preg_match("/Sec-WebSocket-Key: (.*)\r\n/",$buffer,$match)){ $responseKey=base64_encode(sha1($match[1] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',true)); $upgrade="HTTP/1.1 101 Switching Protocol\r\n". "Upgrade: websocket\r\n". "Connection: Upgrade\r\n". "Sec-WebSocket-Accept:".$responseKey."\r\n\r\n"; socket_write($socket,$upgrade,strlen($upgrade)); }
$socket is the connection we created, $buffer is the data sent when the client connects for the first time
Note: Sec-WebSocket-Key: (.*)//There must be spaces between brackets and colons
Deframing
$len=$masks=$data=$decoded=null; $len=ord($buffer[1]) & 127; if($len === 126){ $masks=substr($buffer,4,4); $data=substr($buffer, 8); }else if($len === 127){ $masks=substr($buffer,10,4); $data=substr($buffer, 14); }else{ $masks=substr($buffer,2,4); $data=substr($buffer, 6); } for($index = 0;$index<strlen($data);$index++){ $decoded.=$data[$index] ^ $masks[$index % 4]; } return $decoded;
$buffer is the client first The data sent during the first connection
Frame seal
$len=strlen($message); if($len<=125){ return "\x81".chr($len).$message; }else if($len<=65535){ return "\x81".chr(126).pack("n",$len).$message; }else{ return "\x81".chr(127).pack("xxxxN",$len).$message; }
$message is the data we need to send
Remember to run the server before the front-end connection, the running method:
Enter in cmd
php 你的服务端PHP文件路径
Configure environment variables before running: add your PHP installation path to Path
Recommended learning: "PHP Video Tutorial"
The above is the detailed content of How to build a websocket environment in php. For more information, please follow other related articles on the PHP Chinese website!