Comment utiliser Swoole pour implémenter l'interaction du serveur WebSocket et de la base de données
Introduction :
WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut établir une communication bidirectionnelle en temps réel entre le client et le serveur . Swoole est une extension PHP qui peut facilement implémenter une programmation asynchrone et simultanée hautes performances. Dans cet article, nous présenterons en détail comment utiliser Swoole pour créer un serveur WebSocket et interagir avec la base de données.
Étape 1 : Installez l'extension Swoole
Tout d'abord, nous devons installer l'extension Swoole. Il peut être installé via la commande suivante :
pecl install swoole
Étape 2 : Créer un serveur WebSocket
Ensuite, nous créons un serveur WebSocket, écoutons le port spécifié et établissons une connexion avec le client. Ceci peut être réalisé en utilisant le code suivant :
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new connection open: {$request->fd} "; }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "received message: {$frame->data} "; // 处理数据库交互 $db = new mysqli('localhost', 'username', 'password', 'database'); $result = $db->query("SELECT * FROM users"); while ($row = $result->fetch_assoc()) { $server->push($frame->fd, json_encode($row)); } $db->close(); }); $server->on('close', function ($ser, $fd) { echo "connection close: {$fd} "; }); $server->start(); ?>
Dans le code ci-dessus, nous créons un serveur WebSocket et ajoutons trois fonctions de rappel d'événement. Lorsqu'une connexion est établie, l'événement open
sera déclenché ; lorsqu'un message est reçu, l'événement message
sera déclenché lorsque la connexion est fermée, le ; L'événement close
sera déclenché. >L'événement sera déclenché. Dans l'événement message
, nous pouvons effectuer des opérations interactives sur la base de données. open
事件将被触发;当收到消息时,message
事件将被触发;当连接关闭时,close
事件将被触发。在message
事件中,我们可以进行数据库的交互操作。
步骤三:与数据库交互
在message
事件回调函数中,我们使用了MySQLi扩展来与数据库进行交互。首先,我们创建了一个$db
对象,并使用mysqli
的构造函数连接到数据库。接着,我们执行了一条查询语句,并通过while
循环将查询结果发送给客户端。最后,我们关闭了数据库连接。
需要注意的是,为了安全起见,我们应该将数据库的相关信息(如用户名和密码)设置为环境变量,并通过getenv()
函数来获取这些值,以避免直接暴露在代码中。
步骤四:运行服务器
最后,我们使用命令行来运行上述代码。在命令行中切换到代码所在的目录,并执行以下命令:
php server.php
如果一切正常,你将看到WebSocket服务器成功启动,并等待客户端的连接。当有客户端连接到服务器时,open
事件将被触发,并在命令行中显示连接的ID。当收到客户端发来的消息时,message
事件将被触发,并在命令行中显示收到的消息。当连接关闭时,close
事件将被触发,同样在命令行中显示连接的关闭。
总结:
本文详细介绍了如何使用Swoole实现WebSocket服务器与数据库的交互。通过创建WebSocket服务器,并在message
message
, nous utilisons l'extension MySQLi pour interagir avec la base de données. Tout d'abord, nous créons un objet $db
et utilisons le constructeur de mysqli
pour nous connecter à la base de données. Ensuite, nous avons exécuté une instruction de requête et envoyé les résultats de la requête au client via une boucle while
. Enfin, nous fermons la connexion à la base de données. 🎜🎜Il convient de noter que pour des raisons de sécurité, nous devons définir les informations liées à la base de données (telles que le nom d'utilisateur et le mot de passe) comme variables d'environnement et obtenir ces valeurs via la fonction getenv()
pour éviter directement exposé dans le code. 🎜🎜Étape 4 : Exécuter le serveur🎜🎜Enfin, nous utilisons la ligne de commande pour exécuter le code ci-dessus. Basculez vers le répertoire où se trouve le code sur la ligne de commande et exécutez la commande suivante : 🎜rrreee🎜 Si tout se passe bien, vous verrez que le serveur WebSocket démarre avec succès et attend que le client se connecte. Lorsqu'un client se connecte au serveur, l'événement open
sera déclenché et l'ID de connexion sera affiché sur la ligne de commande. Lorsqu'un message du client est reçu, l'événement message
sera déclenché et le message reçu sera affiché sur la ligne de commande. Lorsque la connexion est fermée, l'événement close
sera déclenché et la fermeture de la connexion sera également affichée sur la ligne de commande. 🎜🎜Résumé : 🎜Cet article détaille comment utiliser Swoole pour implémenter l'interaction entre le serveur WebSocket et la base de données. En créant un serveur WebSocket et en effectuant une interaction avec la base de données dans la fonction de rappel d'événement message
, nous pouvons réaliser une communication bidirectionnelle en temps réel. Grâce aux extensions Swoole, nous pouvons facilement effectuer une programmation asynchrone et simultanée hautes performances. J'espère que cet article vous sera utile pour utiliser Swoole pour interagir avec la base de données. 🎜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!