


Pratique PHP consistant à créer une salle de discussion simple basée sur Websocket
Dec 22, 2016 am 10:01 AML'exemple de cet article décrit la pratique de création d'un salon de discussion simple en PHP basé sur websocket. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants?:
1. Avant-propos
Il y a un simple salon de discussion dans le jeu de l'entreprise. Après l'avoir compris, j'ai réalisé qu'il avait été créé par node websocket. un simple salon de discussion. J’ai donc collecté diverses informations, lu des documents, cherché des exemples et écrit moi-même un simple salon de discussion.
Les connexions http sont divisées en connexions courtes et connexions longues. Les connexions courtes peuvent généralement être implémentées à l'aide d'Ajax, et les connexions longues sont des websockets. Les connexions courtes sont relativement simples à mettre en ?uvre, mais consomment trop de ressources. Websocket est efficace mais présente quelques problèmes de compatibilité. Websocket est une ressource de html5
2 Front-end
La mise en ?uvre frontale de websocket est très simple et directe
//連接websocket var ws = new WebSocket("ws://127.0.0.1:8000"); //成功連接websoc的時候 ws.onopen = function(){} //成功獲取服務端輸出的消息 ws.onmessage = function(e){} //連接錯誤的時候 ws.onerror = function(){} //向服務端發(fā)送數據 ws.send();
Backend
.
Difficultés de websocket Principalement en arrière-plan
3.1 Processus de connexion websocket
schéma de communication websocket Il s'agit d'un simple schéma de communication entre le client et le serveur. Ce que PHP fait principalement, c'est. pour accepter la clé de cryptage et la renvoyer pour terminer la création du socket Word et l'opération de prise de contact
L'image suivante est un organigramme détaillé du websocket de traitement du serveur
3.2 Pratique du code
Le processus effectué par le serveur est en gros?:
Suspendre un processus de socket pour attendre la connexion
Parcourir le tableau de sockets après une connexion de socket
S'il n'y a pas de prise de contact, effectuez une opération de prise de contact. S'il y a une prise de contact, recevez les données, analysez-les et écrivez. dans le tampon pour la sortie
Ce qui suit est l'exemple de code (j'ai écrit une classe, donc le code est segmenté selon les fonctions. Le bas de l'article donne l'adresse github et quelques pièges que j'ai). rencontré
1. Tout d'abord, créez une socket
//建立套接字 public function createSocket($address,$port) { //創(chuàng)建一個套接字 $socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //設置套接字選項 socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); //綁定IP地址和端口 socket_bind($socket,$address,$port); //監(jiān)聽套接字 socket_listen($socket); return $socket; }
2. Mettez la socket dans le tableau
public function __construct($address,$port) { //建立套接字 $this->soc=$this->createSocket($address,$port); $this->socs=array($this->soc); }
3. Suspendez le processus Parcourez le tableau de sockets, les principales opérations sont terminées ici
public function run(){ //掛起進程 while(true){ $arr=$this->socs; $write=$except=NULL; //接收套接字數字 監(jiān)聽他們的狀態(tài) socket_select($arr,$write,$except, NULL); //遍歷套接字數組 foreach($arr as $k=>$v){ //如果是新建立的套接字返回一個有效的 套接字資源 if($this->soc == $v){ $client=socket_accept($this->soc); if($client <0){ echo "socket_accept() failed"; }else{ // array_push($this->socs,$client); // unset($this[]); //將有效的套接字資源放到套接字數組 $this->socs[]=$client; } }else{ //從已連接的socket接收數據 返回的是從socket中接收的字節(jié)數 $byte=socket_recv($v, $buff,20480, 0); //如果接收的字節(jié)是0 if($byte<7) continue; //判斷有沒有握手沒有握手則進行握手,如果握手了 則進行處理 if(!$this->hand[(int)$client]){ //進行握手操作 $this->hands($client,$buff,$v); }else{ //處理數據操作 $mess=$this->decodeData($buff); //發(fā)送數據 $this->send($mess,$v); } } } } }
4. Le processus de prise de contact consiste à recevoir le contenu du websocket de Sec-WebSocket- Key?: obtenez la clé et écrivez-la dans le tampon via l'algorithme de cryptage. Le client la vérifiera (la vérification automatique ne nous oblige pas à la traiter) ?. >
public function hands($client,$buff,$v) { //提取websocket傳的key并進行加密 (這是固定的握手機制獲取Sec-WebSocket-Key:里面的key) $buf = substr($buff,strpos($buff,'Sec-WebSocket-Key:')+18); //去除換行空格字符 $key = trim(substr($buf,0,strpos($buf,"\r\n"))); //固定的加密算法 $new_key = base64_encode(sha1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true)); $new_message = "HTTP/1.1 101 Switching Protocols\r\n"; $new_message .= "Upgrade: websocket\r\n"; $new_message .= "Sec-WebSocket-Version: 13\r\n"; $new_message .= "Connection: Upgrade\r\n"; $new_message .= "Sec-WebSocket-Accept: " . $new_key . "\r\n\r\n"; //將套接字寫入緩沖區(qū) socket_write($v,$new_message,strlen($new_message)); // socket_write(socket,$upgrade.chr(0), strlen($upgrade.chr(0))); //標記此套接字握手成功 $this->hand[(int)$client]=true; }5. Analyse des données Client (je ne les ai pas chiffrées ici, vous pouvez les chiffrer vous-même si nécessaire)
//解析數據 public function decodeData($buff) { //$buff 解析數據幀 $mask = array(); $data = ''; $msg = unpack('H*',$buff); //用unpack函數從二進制將數據解碼 $head = substr($msg[1],0,2); if (hexdec($head{1}) === 8) { $data = false; }else if (hexdec($head{1}) === 1){ $mask[] = hexdec(substr($msg[1],4,2)); $mask[] = hexdec(substr($msg[1],6,2)); $mask[] = hexdec(substr($msg[1],8,2)); $mask[] = hexdec(substr($msg[1],10,2)); //遇到的問題 剛連接的時候就發(fā)送數據 顯示 state connecting $s = 12; $e = strlen($msg[1])-2; $n = 0; for ($i=$s; $i<= $e; $i+= 2) { $data .= chr($mask[$n%4]^hexdec(substr($msg[1],$i,2))); $n++; } //發(fā)送數據到客戶端 //如果長度大于125 將數據分塊 $block=str_split($data,125); $mess=array( 'mess'=>$block[0], ); return $mess; }6. écrivez le socket dans le tampon
//發(fā)送數據 public function send($mess,$v) { //遍歷套接字數組 成功握手的 進行數據群發(fā) foreach ($this->socs as $keys => $values) { //用系統(tǒng)分配的套接字資源id作為用戶昵稱 $mess['name']="Tourist's socket:{$v}"; $str=json_encode($mess); $writes ="\x81".chr(strlen($str)).$str; // ob_flush(); // flush(); // sleep(3); if($this->hand[(int)$values]) socket_write($values,$writes,strlen($writes)); } }7. adresse github git@github.com:rsaLive/websocket.git① Il est préférable d'exécuter server.php dans la console Allez dans le répertoire du script server.php (vous pouvez d'abord php -v pour voir si php est configuré. S'il n'y a pas de configuration Linux, configurez le chemin dans bash windows sous Linux) php -f server.php<. ??>S'il y a une erreur, il vous demandera
①server.php peut être utilisé dans le processus bloqué Sortie imprimée, s'il y a un problème, vous pouvez ajouter impression du code pour le débogage
Vous pouvez marquer chaque jugement et vérifier la console dans quelle section le code est exécuté
Mais après chaque modification du code Vous devez réexécuter le script php server.php
② Si ??cette erreur se produit, cela peut être
1. Envoyer des données lors de l'initialisation du socket avec le serveur (Le contenu ne peut pas être envoyé pendant la première poignée de main de vérification avec le serveur)2. Cela se produira également si le message a été vérifié mais que le client ne l'a pas envoyé ou que le message envoyé est vide
Vérifiez donc les données de la prise connectée
③可能瀏覽器不支持或者服務端沒有開啟socket開始之前最好驗證下
if (window.WebSocket){ console.log("This browser supports WebSocket!"); } else { console.log("This browser does not support WebSocket."); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。
更多Pratique PHP consistant à créer une salle de discussion simple basée sur Websocket相關文章請關注PHP中文網!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en ?uvre en détail. 1. Technologie WebSocket

La combinaison de golangWebSocket et JSON : réaliser la transmission et l'analyse des données Dans le développement Web moderne, la transmission de données en temps réel devient de plus en plus importante. WebSocket est un protocole utilisé pour établir une communication bidirectionnelle. Contrairement au modèle de requête-réponse HTTP traditionnel, WebSocket permet au serveur de transmettre activement des données au client. JSON (JavaScriptObjectNotation) est un format léger d'échange de données, concis et facile à lire.

PHP et WebSocket?: meilleures pratiques pour le transfert de données en temps réel Introduction?: Dans le développement d'applications Web, le transfert de données en temps réel est une exigence technique très importante. Le protocole HTTP traditionnel est un protocole de modèle requête-réponse et ne peut pas assurer efficacement la transmission de données en temps réel. Afin de répondre aux besoins de transmission de données en temps réel, le protocole WebSocket a vu le jour. WebSocket est un protocole de communication full-duplex qui permet de communiquer en full-duplex via une seule connexion TCP. Comparé à H

Comment utiliser WebSocket et JavaScript pour mettre en ?uvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

Comment utiliser Java et WebSocket pour mettre en ?uvre une cotation boursière en temps réel Introduction : Avec le développement rapide d'Internet, la cotation boursière en temps réel est devenue l'une des priorités des investisseurs. La méthode traditionnelle de poussée boursière présente des problèmes tels qu'un retard élevé et une vitesse de rafra?chissement lente. Pour les investisseurs, l'incapacité d'obtenir les dernières informations boursières en temps opportun peut entra?ner des erreurs dans les décisions d'investissement. La cotation boursière en temps réel basée sur Java et WebSocket peut résoudre efficacement ce problème, permettant aux investisseurs d'obtenir les dernières informations sur le cours des actions dès que possible.

Avec le développement continu de la technologie Internet, la communication en temps réel est devenue un élément indispensable de la vie quotidienne. Une communication en temps réel efficace et à faible latence peut être obtenue grace à la technologie WebSockets, et PHP, en tant que l'un des langages de développement les plus utilisés dans le domaine Internet, fournit également la prise en charge WebSocket correspondante. Cet article explique comment utiliser PHP et WebSocket pour établir une communication en temps réel et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ?

Avec le développement continu de la technologie Internet, le streaming vidéo en temps réel est devenu une application importante dans le domaine Internet. Pour réaliser un streaming vidéo en temps réel, les technologies clés incluent WebSocket et Java. Cet article explique comment utiliser WebSocket et Java pour implémenter la lecture en streaming vidéo en temps réel et fournit des exemples de code pertinents. 1. Qu'est-ce que WebSocket ? WebSocket est un protocole de communication full-duplex sur une seule connexion TCP. Il est utilisé sur le Web.

Dans cet article, nous comparerons les événements envoyés par le serveur (SSE) et les WebSockets, qui sont tous deux des méthodes fiables pour fournir des données. Nous les analyserons sous huit aspects, notamment la direction de la communication, le protocole sous-jacent, la sécurité, la facilité d'utilisation, les performances, la structure des messages, la facilité d'utilisation et les outils de test. Une comparaison de ces aspects est résumée comme suit?: Catégorie événement envoyé par le serveur (SSE) Direction de communication WebSocket Unidirectionnel Bidirectionnel Protocole sous-jacent HTTP Sécurité du protocole WebSocket Identique à HTTP Failles de sécurité existantes Facilité d'utilisation Paramètres Paramètres simples Performances complexes Vitesse d'envoi rapide des messages Affecté par le traitement des messages et la gestion des connexions Structure du message Texte brut ou binaire Facilité d'utilisation Largement disponible Utile pour l'intégration de WebSocket
