Maison > Article > développement back-end > Guide de développement PHP Websocket pour implémenter la fonction de traitement des commandes en temps réel
Guide de développement PHP Websocket pour implémenter des fonctions de traitement des commandes en temps réel
Websocket est un protocole de communication bidirectionnelle en temps réel entre les applications Web et les serveurs. Par rapport aux requêtes HTTP traditionnelles, WebSocket peut établir des connexions persistantes plus efficacement pour réaliser une transmission de données en temps réel. Dans cet article, je vais vous présenter comment utiliser PHP pour le développement Websocket et implémenter une fonction de traitement des commandes en temps réel.
Tout d’abord, nous devons comprendre quelques concepts et principes de base. Le protocole WebSocket utilise un processus spécial d'établissement de liaison HTTP pour établir une connexion persistante. Après cela, le client et le serveur peuvent effectuer une transmission de données bidirectionnelle via cette connexion.
En PHP, vous pouvez utiliser la bibliothèque Ratchet pour implémenter la fonctionnalité WebSocket. Ratchet est une bibliothèque PHP Socket open source qui fournit un ensemble d'API faciles à utiliser pour nous permettre de créer rapidement des serveurs WebSocket.
Tout d'abord, nous devons installer la bibliothèque Ratchet. Ratchet peut être facilement installé via Composer. Ouvrez la fenêtre de ligne de commande, entrez dans le répertoire du projet PHP et exécutez la commande suivante :
composer require cboden/ratchet
Une fois l'installation terminée, nous pouvons commencer à écrire du code. Tout d'abord, créez un fichier PHP nommé server.php
et introduisez la bibliothèque Ratchet : server.php
,在其中引入Ratchet库:
<?php require 'vendor/autoload.php'; use RatchetMessageComponentInterface; use RatchetConnectionInterface; use RatchetServerIoServer; use RatchetHttpHttpServer; use RatchetWebSocketWsServer;
在下面的代码中,我们创建了一个名为OrderHandler
的类,它实现了MessageComponentInterface
接口。这个类将负责处理客户端发送的消息。
class OrderHandler implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { // 客户端连接成功时执行的代码 $this->clients->attach($conn); } public function onMessage(ConnectionInterface $from, $msg) { // 处理客户端发送的消息 // 在这里进行订单处理的逻辑 // 将处理结果发送给所有连接的客户端 foreach ($this->clients as $client) { $client->send($msg); } } public function onClose(ConnectionInterface $conn) { // 客户端断开连接时执行的代码 $this->clients->detach($conn); } public function onError(ConnectionInterface $conn, Exception $e) { // 发生错误时执行的代码 echo 'Error: ' . $e->getMessage() . PHP_EOL; $conn->close(); } }
上述代码中,通过onOpen
方法,我们可以在客户端连接成功时执行相应的代码。在onMessage
方法中,我们可以处理客户端发送的消息,并在这里实现订单处理的逻辑。通过onClose
方法,我们可以在客户端断开连接时执行相应的代码。onError
方法用于处理发生的错误。
最后,我们需要创建一个WebSocket服务器,并指定端口号。在server.php
文件的末尾,添加以下代码:
$server = IoServer::factory( new HttpServer( new WsServer( new OrderHandler() ) ), 8080 ); $server->run();
在以上代码中,我们通过IoServer
类创建了一个WebSocket服务器,指定了一个HttpServer
来处理HTTP请求,和一个WsServer
来处理WebSocket协议。OrderHandler
类负责处理具体的订单逻辑。服务器监听8080端口。
保存并执行server.php
文件,此时WebSocket服务器已经启动。接下来,我们需要在客户端添加相应的代码来连接服务器。
<!DOCTYPE html> <html> <head> <title>WebSocket Order</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(function () { var conn = new WebSocket('ws://localhost:8080'); conn.onopen = function (event) { console.log('Connected'); }; conn.onmessage = function (event) { var data = JSON.parse(event.data); console.log('Received:', data); // 在这里进行订单处理后的操作 }; conn.onclose = function (event) { console.log('Disconnected'); }; }); </script> </head> <body> </body> </html>
在以上代码中,我们使用JavaScript中的WebSocket对象来与服务器建立连接。通过相应的事件监听函数,我们可以处理服务器发送的消息,并在conn.onmessage
rrreee
OrderHandler
, qui implémente le MessageComponentInterface
. Cette classe sera responsable du traitement des messages envoyés par le client. rrreee
Dans le code ci-dessus, grâce à la méthodeonOpen
, nous pouvons exécuter le code correspondant lorsque la connexion client est réussie. Dans la méthode onMessage
, nous pouvons traiter le message envoyé par le client et implémenter ici la logique de traitement des commandes. Grâce à la méthode onClose
, nous pouvons exécuter le code correspondant lorsque le client se déconnecte. La méthode onError
est utilisée pour gérer les erreurs qui se produisent. Enfin, nous devons créer un serveur WebSocket et spécifier le numéro de port. A la fin du fichier server.php
, ajoutez le code suivant : 🎜rrreee🎜Dans le code ci-dessus, nous avons créé un serveur WebSocket via la classe IoServer
, en spécifiant un HttpServer pour gérer les requêtes HTTP, et un WsServer
pour gérer le protocole WebSocket. La classe OrderHandler
est responsable de la gestion de la logique de commande spécifique. Le serveur écoute sur le port 8080. 🎜🎜Enregistrez et exécutez le fichier server.php
, et le serveur WebSocket a été démarré. Ensuite, nous devons ajouter le code correspondant côté client pour nous connecter au serveur. 🎜rrreee🎜Dans le code ci-dessus, nous utilisons l'objet WebSocket en JavaScript pour établir une connexion avec le serveur. Grâce à la fonction d'écoute d'événements correspondante, nous pouvons traiter le message envoyé par le serveur et effectuer des opérations de traitement post-commande dans la fonction conn.onmessage
. 🎜🎜À ce stade, nous avons complété une fonction simple de traitement des commandes en temps réel. Lorsqu'une nouvelle commande est générée, le serveur enverra les informations de commande à tous les clients connectés et les clients pourront effectuer un traitement ultérieur. 🎜🎜À travers l'introduction de cet article, nous pouvons voir qu'il est très simple d'utiliser PHP et la bibliothèque Ratchet pour le développement WebSocket. Avec WebSocket, nous pouvons réaliser une communication bidirectionnelle en temps réel et apporter une expérience plus interactive aux applications Web. J'espère que cet article sera utile à tout le monde pour comprendre et apprendre le développement PHP WebSocket et implémenter des fonctions de traitement des commandes en temps réel. 🎜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!