Titre : Utilisez PHP pour développer Websocket afin d'obtenir une fonction push en temps réel
Websocket est un protocole de communication basé sur le protocole TCP. Dans le développement Web, Websocket peut être utilisé pour implémenter une fonction push en temps réel pour obtenir un temps réel. communication ou mise à jour en temps réel des données. Dans cet article, nous développerons un serveur Websocket en utilisant le langage PHP et fournirons des exemples de code spécifiques.
1. Présentation
Websocket est un protocole de communication full-duplex Par rapport au protocole HTTP traditionnel, Websocket est plus adapté aux scénarios de communication en temps réel. Les fonctionnalités du protocole Websocket incluent :
2. Préparation de l'environnement de développement
Avant de commencer le développement, vous devez préparer certains outils et environnement :
3. Installez la bibliothèque Websocket
En PHP, il existe de nombreuses bibliothèques Websocket matures parmi lesquelles choisir, parmi lesquelles les plus couramment utilisées sont Ratchet, Swoole, etc. Dans cet article, nous utiliserons Ratchet pour le développement.
composer.json
dans le répertoire racine du projet et ajoutez le contenu suivant : composer.json
文件,并添加以下内容:{ "require": { "cboden/ratchet": "^0.4" } }
composer install
四、编写Websocket服务器代码
在创建Websocket服务器之前,我们先来讨论一下Websocket的工作流程。
send
方法发送消息,并通过onMessage
事件接收消息。下面是一个使用Ratchet库编写Websocket服务器的示例代码:
<?php use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetHttpHttpServer; use RatchetWebSocketWsServer; use RatchetServerIoServer; require 'vendor/autoload.php'; class MyWebSocket implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage(); } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection: {$conn->resourceId} "; } public function onMessage(ConnectionInterface $from, $msg) { // 处理接收到的消息逻辑 foreach ($this->clients as $client) { if ($client !== $from) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection closed: {$conn->resourceId} "; } public function onError(ConnectionInterface $conn, Exception $e) { echo "An error occurred: {$e->getMessage()} "; $conn->close(); } } $server = IoServer::factory( new HttpServer( new WsServer( new MyWebSocket() ) ), 8080 ); $server->run();
以上代码定义了一个MyWebSocket
类,实现了MessageComponentInterface
接口中的方法,用于处理连接、消息、关闭和错误事件。在onOpen
事件中,我们将新建立的连接加入到$clients
集合中;在onMessage
事件中,我们会遍历所有连接并将消息发送给其他客户端;在onClose
事件中,我们从$clients
集合中删除关闭的连接;在onError
php server.php
Ouvrez le terminal, passez au répertoire racine du projet, et exécutez la commande suivante pour installer la bibliothèque Ratchet :
New connection: 1 New connection: 2 Message received: Hello from client 1 Message received: Hello from client 2 Connection closed: 1
Établissement de la connexion : le client établit une connexion Websocket avec le serveur. Le client envoie une requête HTTP et le serveur renvoie une réponse de changement de protocole pour établir la connexion.
Transmission de messages : les deux parties peuvent envoyer des messages via la méthode send
et recevoir des messages via l'événement onMessage
.
Fermeture de connexion : le client ou le serveur envoie une trame de fermeture pour fermer la connexion.
Ce qui suit est un exemple de code pour écrire un serveur Websocket à l'aide de la bibliothèque Ratchet : 🎜<!DOCTYPE html> <html> <head> <title>Websocket Client</title> <script> var socket = new WebSocket("ws://localhost:8080"); socket.onopen = function() { console.log("Connected"); }; socket.onmessage = function(event) { console.log("Message received: " + event.data); }; socket.onclose = function(event) { console.log("Connection closed"); }; function sendMessage() { var message = document.getElementById("message").value; socket.send(message); } </script> </head> <body> <input type="text" id="message"> <button onclick="sendMessage()">Send</button> </body> </html>
MyWebSocket
, qui implémente les méthodes de MessageComponentInterface
interface. Utiliser Pour gérer les événements de connexion, de message, de fermeture et d'erreur. Dans l'événement onOpen
, nous ajoutons la connexion nouvellement établie à la collection $clients
; dans l'événement onMessage
, nous parcourons toutes les connexions et envoyons des messages. aux autres clients ; dans l'événement onClose
, nous supprimons la connexion fermée de la collection $clients
dans l'événement onError
, nous gérons l'exception ; et fermez la connexion. 🎜🎜5. Exécutez le serveur Websocket🎜🎜Basculez vers le répertoire racine du projet dans le terminal et exécutez la commande suivante pour démarrer le serveur Websocket :🎜rrreee🎜Si tout est normal, vous verrez un résultat similaire à celui-ci :🎜rrreee🎜 6. Écrivez le code client🎜🎜Enfin, nous devons écrire un client pour le tester. 🎜rrreee🎜Dans cet exemple, nous utilisons JavaScript pour créer une connexion Websocket et imprimer les journaux correspondants lorsque la connexion est établie, que les messages sont reçus et que la connexion est fermée. Sur la page, nous fournissons une zone de saisie et un bouton d'envoi pour envoyer des messages. 🎜🎜7. Résumé🎜🎜Cet article présente la méthode de développement d'un serveur Websocket à l'aide de PHP et fournit des exemples de code spécifiques pour aider les lecteurs à comprendre le principe de fonctionnement et l'utilisation de Websocket. Websocket a des capacités de communication en temps réel et peut être utilisé pour mettre en œuvre des push en temps réel, des salles de discussion, des jeux multijoueurs et d'autres scénarios. J'espère que cet article vous sera utile. 🎜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!