Maison  >  Article  >  cadre php  >  Comment implémenter un serveur WebSocket à l'aide de Swoole

Comment implémenter un serveur WebSocket à l'aide de Swoole

王林
王林original
2023-06-25 09:59:08904parcourir

WebSocket est devenu un élément essentiel des applications Web modernes. Il fournit une méthode de communication en duplex intégral qui permet une communication en temps réel entre le serveur et le client. Swoole est un framework de communication réseau hautes performances basé sur PHP, qui peut facilement implémenter des serveurs WebSocket.

Cet article expliquera comment utiliser Swoole pour créer un serveur WebSocket.

Installer Swoole

Pour installer Swoole, vous devez utiliser PECL (PHP Extension Community Library). Ouvrez un terminal et entrez la commande suivante :

pecl install swoole

Une fois l'installation terminée, l'extension Swoole sera automatiquement chargée dans la liste des extensions PHP.

Création d'un serveur WebSocket

Le moyen le plus simple de créer un serveur WebSocket consiste à utiliser la classe WebSocket Server de Swoole :

$server = new SwooleWebsocketServer("127.0.0.1", 9501);

$server->on('open', function (SwooleWebsocketServer $server, $request) {
    echo "Client {$request->fd} connected
";
});

$server->on('message', function (SwooleWebsocketServer $server, $frame) {
    echo "Received message: {$frame->data}
";

    // Broadcast message to all connected clients
    foreach ($server->connections as $fd) {
        $server->push($fd, $frame->data);
    }
});

$server->on('close', function (SwooleWebsocketServer $server, $fd) {
    echo "Client {$fd} disconnected
";
});

$server->start();

Cet exemple crée un serveur WebSocket local et le configure pour écouter sur le port 9501. Il ajoute également trois fonctions de rappel :

  • open - sera appelé lorsqu'un nouveau client WebSocket se connectera au serveur.
  • open - 当新的WebSocket客户端连接到服务器时,将被调用。
  • message - 当服务器接收到来自客户端的消息时,将被调用。
  • close - 当客户端断开连接时,将被调用。

open函数中,我们向控制台输出一个简单的消息,提示我们已经连接了一个新的客户端。

message函数中,我们向控制台输出接收到的消息,并向所有已连接的客户端广播此消息。

close函数中,我们向控制台输出一个消息,提示已断开连接的客户端的fd。

最后,我们通过调用start方法启动WebSocket服务器。

测试WebSocket服务器

为了测试WebSocket服务器,可以使用JavaScript的WebSocket API编写一个简单的客户端。这里提供一个非常简单的例子:

// Connect to WebSocket server
const ws = new WebSocket('ws://127.0.0.1:9501');

// Send a message to the server
ws.onopen = function() {
    ws.send('Hello, server!');
};

// Receive a message from the server
ws.onmessage = function(event) {
    console.log('Received message:', event.data);
};

在这个例子中,我们创建一个WebSocket对象,并连接到刚才创建的WebSocket服务器。我们还定义了两个回调函数:

  • onopen - 当WebSocket连接成功建立时,将被调用。在这里我们向服务器发送了一个消息。
  • onmessage - 当WebSocket接收到来自服务器的消息时,将被调用。

要测试这个客户端,只需在浏览器中打开控制台并将代码复制粘贴到控制台中即可。

实现更多功能

除了在该例子中演示的功能之外,Swoole还提供了许多其他有用的功能。例如,您可以通过调用pushmessage - Sera appelé lorsque le serveur recevra un message du client.

close - Sera appelé lorsque le client se déconnectera.

Dans la fonction open, nous envoyons un simple message à la console, indiquant que nous avons connecté un nouveau client.

🎜Dans la fonction message, nous transmettons le message reçu à la console et diffusons ce message à tous les clients connectés. 🎜🎜Dans la fonction close, nous envoyons un message à la console indiquant le fd du client déconnecté. 🎜🎜Enfin, nous démarrons le serveur WebSocket en appelant la méthode start. 🎜🎜Test d'un serveur WebSocket🎜🎜Pour tester un serveur WebSocket, vous pouvez écrire un client simple à l'aide de l'API WebSocket de JavaScript. Voici un exemple très simple : 🎜rrreee🎜 Dans cet exemple, nous créons un objet WebSocket et nous nous connectons au serveur WebSocket que nous venons de créer. Nous définissons également deux fonctions de rappel : 🎜🎜🎜onopen - sera appelée lorsque la connexion WebSocket sera établie avec succès. Ici, nous envoyons un message au serveur. 🎜onmessage - Sera appelé lorsque WebSocket recevra un message du serveur. 🎜Pour tester ce client, ouvrez simplement la console dans votre navigateur et copiez et collez le code dans la console. 🎜🎜Obtenez plus de fonctions🎜🎜En plus des fonctions démontrées dans cet exemple, Swoole fournit également de nombreuses autres fonctions utiles. Par exemple, vous pouvez envoyer un message au client en appelant la méthode push. De plus, vous pouvez utiliser des coroutines pour implémenter une programmation asynchrone. 🎜🎜En bref, Swoole est très adapté à la construction de serveurs WebSocket. Il fournit de nombreuses fonctionnalités utiles qui facilitent grandement le développement d’applications Web 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn