Maison > Article > développement back-end > Introduction à la programmation multithread PHP : Créer un serveur WebSocket à l'aide de l'extension swoole
Introduction à la programmation multithread PHP : Créez un serveur WebSocket à l'aide de l'extension swoole
Avant-propos
Dans le développement Web, la communication en temps réel est devenue une exigence de plus en plus importante. Le protocole HTTP traditionnel ne peut pas répondre aux besoins de communication en temps réel et le protocole WebSocket est devenu la solution. Afin d'implémenter un serveur WebSocket en PHP, nous pouvons utiliser l'extension swoole pour créer un serveur multi-thread.
1. Qu'est-ce que le swoole ?
swoole est une extension PHP qui prend en charge l'asynchrone, le multi-threading et les coroutines. En utilisant swoole, nous pouvons créer des serveurs simultanés, des tâches asynchrones, des connexions longues et des applications réseau hautes performances en PHP. Il fournit une série d'API pour implémenter ces fonctions, notamment la prise en charge de différents protocoles tels que TCP, UDP, HTTP, WebSocket, etc.
2. Préparation
Avant de commencer, vous devez vous assurer que vous avez installé l'extension swoole. Vous pouvez utiliser la commande suivante pour installer swoole dans un système Linux :
pecl install swoole
Ou dans un système Windows, vous pouvez télécharger le package binaire swoole depuis le site officiel et l'extraire dans le répertoire d'extension PHP. Ajoutez ensuite la configuration suivante dans le fichier php.ini :
extension=swoole
3. Créez un serveur WebSocket
Ci-dessous, nous utiliserons un exemple simple pour montrer comment utiliser l'extension swoole pour créer un serveur WebSocket.
Tout d'abord, nous créons un fichier server.php, introduisons l'extension swoole et initialisons un serveur WebSocket :
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501);
Ensuite, nous pouvons définir certains paramètres du serveur, tels que le nombre de processus de travail et le port d'écoute. :
$server->set([ 'worker_num' => 4, 'max_request' => 10000, ]);
Ensuite, nous écoutons l'événement d'ouverture de la connexion WebSocket et le traitons en conséquence :
$server->on('open', function ($server, $request) { echo "new connection: {$request->fd} "; });
Ensuite, nous écoutons l'événement de message WebSocket et le traitons en conséquence :
$server->on('message', function ($server, $frame) { echo "received message: {$frame->data} "; // 可以在这里编写自定义的业务逻辑处理 });
Enfin, nous écoutez la connexion WebSocket Fermez l'événement et gérez-le en conséquence :
$server->on('close', function ($server, $fd) { echo "connection closed: {$fd} "; });
Enfin, nous démarrons le serveur WebSocket :
$server->start();
Exécutez server.php dans la ligne de commande :
php server.php
4. Testez le WebSocket serveur
Maintenant que nous avons créé Maintenant que nous avons un serveur WebSocket, nous pouvons utiliser une simple page HTML pour le tester.
Tout d'abord, créez un fichier index.html et écrivez le code suivant :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WebSocket Test</title> <script> var ws = new WebSocket("ws://localhost:9501"); ws.onopen = function() { console.log("WebSocket connection open."); }; ws.onmessage = function(evt) { console.log("received message: " + evt.data); }; ws.onclose = function() { console.log("WebSocket connection closed."); }; </script> </head> <body> <h1>WebSocket Test</h1> </body> </html>
Résumé
En utilisant l'extension swoole, nous pouvons facilement créer un serveur WebSocket en PHP. Dans le développement réel du projet, nous pouvons encore améliorer et optimiser les fonctions du serveur WebSocket en fonction de besoins spécifiques. Dans le même temps, swoole fournit également davantage de fonctions et d'API pouvant être utilisées pour gérer des applications réseau simultanées, asynchrones et hautes performances, permettant un apprentissage et une pratique plus approfondis.
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!