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.
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 代码和管理异步任务。
我们需要在项目的配置文件 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
目录下。
我们在 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
控制器类中,我们需要实现 onMessage
、onConnect
、onClose
和 onWorkerStart
四个方法。
onMessage
: 当客户端发送数据时,会触发 onMessage
方法,参数 $connection
表示客户端的连接对象,$data
表示客户端发送的数据。onConnect
: 在客户端连接的时候会触发 onConnect
方法,参数 $connection
表示客户端的连接对象。onClose
: 在客户端断开连接的时候会触发 onClose
方法,参数 $connection
表示客户端的连接对象。onWorkerStart
: 在工作进程启动的时候会触发 onWorkerStart
方法,参数 $worker
表示当前工作进程的对象。配置好 WebSocket 之后,我们可以使用 think
命令来启动 WebSocket。
php think worker:start
上述命令会启动一个 WebSocket 服务,并在控制台输出运行日志。
WebSocket 实现之后,我们可以使用 WebSocket 的客户端进行测试。我们可以使用 Chrome
浏览器并安装 Simple WebSocket Client
插件来进行测试。在插件中输入 WebSocket 服务器的地址,点击连接,即可开始使用 WebSocket 通信。
在 Simple WebSocket Client
rrreee
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 WebSocketNous 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. 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!