Home >Backend Development >PHP Problem >How to build a websocket environment in php

How to build a websocket environment in php

藏色散人
藏色散人Original
2022-10-27 10:33:192494browse

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.

How to build a websocket environment in php

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn