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

Comment créer un environnement websocket en php

藏色散人
Libérer: 2023-03-17 10:00:02
original
2500 Les gens l'ont consulté

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
Copier après la connexion

Après ouverture :

extension=sockets
Copier après la connexion

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);//断开连接
Copier après la connexion

; 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));
        }
Copier après la connexion

$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;
Copier après la connexion

$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;
}
Copier après la connexion

$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文件路径
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal