Maison >développement back-end >Problème PHP >Comment créer un environnement websocket en php

Comment créer un environnement websocket en php

藏色散人
藏色散人original
2022-10-27 10:33:192513parcourir

Comment créer un environnement websocket en PHP : 1. Recherchez l'extension sockets dans le fichier php.ini et supprimez le point-virgule devant elle ; 2. Mettez à niveau http vers websocket ; 3. Configurez les variables d'environnement et ajoutez le chemin d'installation de PHP ; vers le chemin 4. Entrez "php Path" dans cmd.

Comment créer un environnement websocket en php

L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 8.1, ordinateur Dell G3.

Comment mettre en place un environnement websocket en php ?

PHP crée un serveur websocket

Pour créer ce serveur, vous devez d'abord activer l'extension sockets. Si elle n'est pas activée, une erreur sera de toute façon signalée

Trouvez simplement l'extension sockets dans le php.ini. fichier et supprimez le point-virgule devant lui. Supprimez-le pour l'ouvrir

Avant l'ouverture :

;extension=sockets

Après ouverture :

extension=sockets

Après l'ouverture, on peut d'abord entrer dans le vif du sujet, on comprend quelques fonctions :

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);//断开连接

; De nombreuses étapes sont similaires à la création d'un socket en PHP.

La principale différence est que l'utilisation et les données de socket_write doivent être décodées et encadrées. Nous devons mettre à niveau http vers websocket

http vers 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 est la connexion que nous avons. créé, $buffer est envoyé lorsque le client se connecte pour la première fois Data

Remarque : Sec-WebSocket-Key : (.*)//Il doit y avoir des espaces entre crochets et deux-points

Décadrage

        $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 correspond aux données envoyé lorsque le client se connecte pour la première fois

Scellement du cadre

      $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 sont les données que nous devons envoyer

N'oubliez pas d'exécuter le serveur avant de vous connecter au front-end. Comment exécuter :

Entrez

php 你的服务端PHP文件路径

dans. cmd Configurez les variables d'environnement avant d'exécuter : ajoutez votre chemin d'installation PHP au chemin d'apprentissage recommandé dans

 : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn