Maison >cadre php >PensezPHP >Utiliser WebSocket dans ThinkPHP6

Utiliser WebSocket dans ThinkPHP6

王林
王林original
2023-06-21 12:49:393177parcourir

Avec le développement rapide de la technologie Internet mobile, la demande des utilisateurs en matière de messagerie instantanée et d'interaction en temps réel a progressivement augmenté. En tant que protocole important pour la communication en temps réel sur le Web, le protocole WebSocket présente les caractéristiques de communication full-duplex, de push en temps réel et de faible latence, et est devenu le protocole préféré dans les scénarios d'interaction en temps réel. Par conséquent, dans le développement Web, nous devons maîtriser l’utilisation de WebSocket pour établir une communication en temps réel.

En PHP, nous pouvons utiliser l'extension Swoole pour implémenter la fonctionnalité WebSocket. Cependant, le déploiement et la configuration de Swoole nécessitent beaucoup de temps et d'efforts. Pour certains développeurs qui ne connaissent pas Swoole, le coût d'apprentissage est également relativement élevé.

Aujourd'hui, nous allons vous présenter comment utiliser WebSocket dans ThinkPHP6.

1. Installez l'extension

Avant d'utiliser WebSocket dans ThinkPHP6, nous devons installer l'extension topthink/thinker. topthink/thinker 扩展。

composer require topthink/thinker:dev-master

topthink/thinker 是一个命令行工具,用于在 ThinkPHP6 中运行 PHP 代码和管理异步任务。

2. 配置 WebSocket

我们需要在项目的配置文件 config/socket.php 中配置 WebSocket。

<?php
return [
    // WebSocket服务器地址,使用内网穿透时填写内网地址
    'server' => '127.0.0.1:9501',

    // WebSocket的应用类,需要实现     hinkworkerServer 接口
    'worker_class' => 'appcontrollerWebSocket',
];

我们需要指定 server 的地址以及实现 Server 接口的类 worker_class,在这里我们将实现 WebSocket 功能的控制器类命名为 WebSocket,放在 appcontroller 目录下。

3. 实现 WebSocket

我们在 appcontroller 目录下创建一个名为 WebSocket 的控制器,在控制器中实现 Server 接口。

<?php
namespace appcontroller;

use thinkworkerServer;

class WebSocket implements Server
{
    protected $socket = 'websocket://127.0.0.1:9501';

    public function onMessage($connection, $data)
    {
        foreach ($this->worker->connections as $conn) {
            $conn->send('user ' . $connection->id . ' said: ' . $data);
        }
    }

    public function onConnect($connection)
    {
        echo "new connection from ip " . $connection->getRemoteIp() . "
";
    }

    public function onClose($connection)
    {
        echo "connection closed: " . $connection->id . "
";
    }

    public function onWorkerStart($worker)
    {
        // 初始化
    }
}

WebSocket 控制器类中,我们需要实现 onMessageonConnectonCloseonWorkerStart 四个方法。

  • onMessage: 当客户端发送数据时,会触发 onMessage 方法,参数 $connection 表示客户端的连接对象,$data 表示客户端发送的数据。
  • onConnect: 在客户端连接的时候会触发 onConnect 方法,参数 $connection 表示客户端的连接对象。
  • onClose: 在客户端断开连接的时候会触发 onClose 方法,参数 $connection 表示客户端的连接对象。
  • onWorkerStart: 在工作进程启动的时候会触发 onWorkerStart 方法,参数 $worker 表示当前工作进程的对象。

4. 运行 WebSocket

配置好 WebSocket 之后,我们可以使用 think 命令来启动 WebSocket。

php think worker:start

上述命令会启动一个 WebSocket 服务,并在控制台输出运行日志。

5. 测试 WebSocket

WebSocket 实现之后,我们可以使用 WebSocket 的客户端进行测试。我们可以使用 Chrome 浏览器并安装 Simple WebSocket Client 插件来进行测试。在插件中输入 WebSocket 服务器的地址,点击连接,即可开始使用 WebSocket 通信。

Simple WebSocket Clientrrreee

topthink/thinker est un outil de ligne de commande permettant d'exécuter du code PHP et de gérer des tâches asynchrones dans ThinkPHP6.

2. Configurer WebSocket

Nous devons configurer WebSocket dans le fichier de configuration du projet config/socket.php. 🎜rrreee🎜Nous devons spécifier l'adresse du server et la classe worker_class qui implémente l'interface Server. Ici, nous nommerons la classe du contrôleur qui. implémente la fonction WebSocket. Il s'agit de WebSocket et placé dans le répertoire appcontroller. 🎜🎜3. Implémenter WebSocket🎜🎜Nous créons un contrôleur nommé WebSocket dans le répertoire appcontroller et implémentons l'interface Serveur dans le contrôleur. 🎜rrreee🎜Dans la classe du contrôleur WebSocket, nous devons implémenter onMessage, onConnect, onClose et onWorkerStart quatre méthodes. 🎜
  • onMessage : Lorsque le client envoie des données, la méthode onMessage sera déclenchée. Le paramètre $connection représente celui du client. objet de connexion, $data représente les données envoyées par le client.
  • onConnect : La méthode onConnect sera déclenchée lorsque le client se connectera. Le paramètre $connection représente l'objet de connexion du client. .
  • onClose : La méthode onClose sera déclenchée lorsque le client se déconnectera. Le paramètre $connection représente la connexion du client. objet.
  • onWorkerStart : La méthode onWorkerStart sera déclenchée au démarrage du processus de travail. Le paramètre $worker représente l'objet de. le processus de travail actuel.
🎜4. Exécutez WebSocket🎜🎜Après avoir configuré WebSocket, nous pouvons utiliser la commande think pour démarrer WebSocket. 🎜rrreee🎜La commande ci-dessus démarrera un service WebSocket et affichera le journal des opérations sur la console. 🎜🎜5. Test WebSocket🎜🎜Une fois WebSocket implémenté, nous pouvons utiliser le client WebSocket pour les tests. Nous pouvons utiliser le navigateur Chrome et installer le plug-in Simple WebSocket Client pour les tests. Entrez l'adresse du serveur WebSocket dans le plug-in et cliquez sur Connecter pour commencer à utiliser la communication WebSocket. 🎜🎜Dans Simple WebSocket Client, nous pouvons saisir des caractères et cliquer sur envoyer, et nous pouvons voir le journal de sortie dans la console d'arrière-plan, indiquant que la communication WebSocket fonctionne normalement. 🎜🎜Résumé🎜🎜Dans cet article, nous avons présenté comment utiliser WebSocket dans ThinkPHP6. Le protocole WebSocket est le protocole privilégié pour la communication en temps réel et ses scénarios d'utilisation sont très larges. Dans le développement réel, nous pouvons utiliser WebSocket pour implémenter facilement des fonctions de communication en temps réel en fonction des besoins et améliorer l'expérience utilisateur. 🎜

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