Implémentation de la diffusion Websocket à l'aide de ThinkPHP6
Avec le développement continu des applications Web modernes, la communication en temps réel est devenue l'une des fonctions nécessaires. La technologie WebSocket est l'une des méthodes de communication en temps réel les plus populaires, permettant d'établir une connexion bidirectionnelle persistante entre le serveur et le client pour établir une communication en temps réel.
ThinkPHP est un framework PHP très populaire. ThinkPHP 6 est livré avec le package d'extension Swoole, ce qui rend très simple l'utilisation de la technologie WebSocket. Cet article explique comment utiliser le framework ThinkPHP 6 pour implémenter une fonction de diffusion WebSocket.
Exigences en matière d'environnement
Avant de commencer, vous devez préparer l'environnement suivant :
- PHP 7.2+
- Extension Swoole
- Composer
- Connaissances de base en développement Web
Créer un projet
Tout d'abord, nous devons créer un nouveau projet :
composer create-project topthink/think my-project
Ensuite, afin de faciliter l'utilisation de WebSocket, nous devons ajouter l'extension Swoole dans le fichier composer.json
du projet : composer.json
文件中添加 Swoole 扩展:
"require": { "topthink/think-swoole": "^2.0", "swoole/swoole": "^4.7" }
完成后,运行以下命令进行安装:
composer install
创建控制器
接下来,我们需要创建一个控制器来处理 WebSocket 的请求。在 app/controller
目录下创建一个名为 Websocket.php
的文件,写入以下代码:
<?php declare(strict_types=1); namespace appcontroller; use thinkswooleWebsocket as SwooleWebsocket; use SwooleWebSocketFrame; class Websocket extends SwooleWebsocket { /** * 监听连接事件 * @param SwooleWebSocketServer $server * @param SwooleHttpRequest $request */ public function onOpen($server, $request) { } /** * 监听接收消息事件 * @param SwooleWebSocketServer $server * @param Frame $frame */ public function onMessage($server, Frame $frame) { } /** * 监听关闭事件 * @param SwooleWebSocketServer $server * @param int $fd */ public function onClose($server, $fd) { } }
在上面的代码中,我们继承了 thinkswooleWebsocket
类,并重写了其中的三个方法:
onOpen
方法用于监听连接事件;onMessage
方法用于监听接收消息事件;onClose
方法用于监听关闭事件。
当前,这些方法并没有做任何事情,接下来我们将会在这些方法中添加 WebSocket 通信的逻辑。
注册路由
在控制器创建好之后,我们需要在路由中进行注册。在 app/route.php
文件中添加以下内容:
use thinkacadeRoute; Route::post('/ws', 'Websocket@onMessage')->middleware( hinkmiddlewareAllowCrossDomain::class);
这里使用了 Route::post
方法来注册路由。这个路由的请求方式是 POST
,路径为 /ws
,并将请求映射到了 Websocket
控制器的 onMessage
方法上。
编写 WebSocket 通信逻辑
现在,我们已经完成了 WebSocket 路由和控制器的创建与注册。接下来,我们需要在控制器中添加 WebSocket 通信的逻辑。我们将使用 Swoole 的 WebSocket 服务端来实现 WebSocket 通信。
在 onOpen
方法中,我们可以获取客户端的连接对象,并将其存储起来,以便后续使用。在 onMessage
方法中,我们可以获取客户端发送的消息,并将这条消息广播给其它客户端。在 onClose
方法中,我们需要将客户端从连接池中移除。
在 app/controller
目录下创建一个名为 WebSocketServer.php
的文件,写入以下代码:
<?php declare(strict_types=1); namespace appcontroller; use SwooleHttpResponse; use SwooleWebSocketFrame; use SwooleWebSocketServer; use thinkswoolewebsocketHandlerInterface; class WebSocketServer implements HandlerInterface { /** * @var array $connections */ private $connections = []; /** * 监听连接事件 * @param Server $server * @param SwooleHttpRequest $request */ public function onOpen(Server $server, SwooleHttpRequest $request): void { $this->connections[$request->fd] = $request->fd; echo "client-{$request->fd} is connected "; } /** * 监听消息事件 * @param Server $server * @param Frame $frame */ public function onMessage(Server $server, Frame $frame): void { foreach ($this->connections as $fd) { $info = $server->getClientInfo((int)$fd); if ($info && isset($info['websocket_status']) && $info['websocket_status'] == WEBSOCKET_STATUS_FRAME) { $server->push($fd, $frame->data); } else { unset($this->connections[$fd]); } } echo "received message from client-{$frame->fd}: {$frame->data} "; } /** * 监听关闭事件 * @param Server $server * @param int $fd * @param int $reactorId */ public function onClose(Server $server, int $fd, int $reactorId): void { unset($this->connections[$fd]); echo "client-{$fd} is closed "; } /** * @param Response $response */ public function onHandShake(Request $request, Response $response): bool { // Do nothing return true; } }
配置 WebSocket 服务
在写入 WebSocket 的服务代码之前,我们需要在 config
目录下创建一个名为 swoole.php
的配置文件,写入以下内容:
return [ 'socket_type' => 'websocket', 'host' => '0.0.0.0', 'port' => 9501, 'mode' => SWOOLE_PROCESS, 'sock_type' => SWOOLE_SOCK_TCP, 'settings' => [ 'worker_num' => swoole_cpu_num(), ], 'handler' => ppcontrollerWebSocketServer::class, ];
在上面的代码中,我们通过配置文件告诉应用程序如何启动 Swoole WebSocket 服务。我们启动 websocket
socket 类型,绑定在 0.0.0.0:9501
上,并开启了多进程模式,使用 TCP 协议。worker_num
配置项设置了服务器的进程数,这里使用了 swoole_cpu_num()
用于返回系统 CPU 数量;handler
配置项指定了我们在上文中创建的 WebSocketServer
类。
运行 WebSocket 服务
在完成了创建、配置 WebSocket 服务的代码之后,我们需要运行一下代码,来开启 WebSocket 服务。在命令行中执行以下命令即可:
php think swoole start --mode=websocket
Websocket 服务已经启动,你可以通过访问你的应用程序来测试它。你可以使用这个地址:ws://your-domain:9501/ws
rrreee
rrreee
Créer un contrôleur de contrôleEnsuite, nous devons créer un contrôleur pour gérer les requêtes WebSocket. Créez un fichier nomméWebsocket.php
dans le répertoire app/controller
et écrivez le code suivant : 🎜rrreee🎜Dans le code ci-dessus, nous avons hérité de thinkswooleWebsocket
classe, et y remplace trois méthodes : 🎜🎜🎜La méthode onOpen
est utilisée pour écouter les événements de connexion ; 🎜🎜La méthode onMessage
est utilisée pour écouter l'événement de réception de message ; 🎜🎜La méthode onClose
est utilisée pour écouter les événements de fermeture. 🎜🎜🎜Actuellement, ces méthodes ne font rien. Ensuite, nous ajouterons la logique de communication WebSocket à ces méthodes. 🎜🎜Enregistrer l'itinéraire🎜🎜Une fois le contrôleur créé, nous devons l'enregistrer dans l'itinéraire. Ajoutez le contenu suivant dans le fichier app/route.php
: 🎜rrreee🎜La méthode Route::post
est utilisée ici pour enregistrer l'itinéraire. La méthode de requête de cette route est POST
, le chemin est /ws
et la requête est mappée au onMessage
du Websocket
contrôleur > Méthodologiquement. 🎜🎜Écriture de la logique de communication WebSocket🎜🎜Maintenant, nous avons terminé la création et l'enregistrement des routes et des contrôleurs WebSocket. Ensuite, nous devons ajouter la logique de communication WebSocket dans le contrôleur. Nous utiliserons le serveur WebSocket de Swoole pour implémenter la communication WebSocket. 🎜🎜Dans la méthode onOpen
, nous pouvons obtenir l'objet de connexion du client et le stocker pour une utilisation ultérieure. Dans la méthode onMessage
, nous pouvons récupérer le message envoyé par le client et diffuser ce message aux autres clients. Dans la méthode onClose
, nous devons supprimer le client du pool de connexions. 🎜🎜Créez un fichier nommé WebSocketServer.php
dans le répertoire app/controller
et écrivez le code suivant : 🎜rrreee🎜Configurez le service WebSocket🎜🎜Écrivez le WebSocket Avant de servir le code, nous devons créer un fichier de configuration nommé swoole.php
dans le répertoire config
et écrire le contenu suivant : 🎜rrreee🎜Dans le code ci-dessus, nous indiquons à l'application comment pour démarrer le service Swoole WebSocket via le fichier de configuration. Nous démarrons le type de socket websocket
, le lions à 0.0.0.0:9501
et activons le mode multi-processus, en utilisant le protocole TCP. L'élément de configuration worker_num
définit le nombre de processus sur le serveur. swoole_cpu_num()
est utilisé ici pour renvoyer le nombre de processeurs système ; L'élément de configuration spécifie notre classe WebSocketServer
créée ci-dessus. 🎜🎜Exécuter le service WebSocket🎜🎜Après avoir terminé le code pour créer et configurer le service WebSocket, nous devons exécuter le code pour démarrer le service WebSocket. Exécutez simplement la commande suivante sur la ligne de commande : 🎜rrreee🎜Le service Websocket a été démarré et vous pouvez le tester en accédant à votre application. Vous pouvez utiliser cette adresse : ws://votre-domaine:9501/ws
. Ouvrez plusieurs onglets dans le navigateur pour tester respectivement la connexion WebSocket, les fonctions d'envoi et de réception de messages. 🎜🎜Résumé🎜🎜Cet article présente comment utiliser le framework ThinkPHP 6 pour implémenter une fonction de diffusion WebSocket. Nous y parvenons en créant des contrôleurs, en enregistrant les routes, en écrivant la logique de communication WebSocket et en configurant le service WebSocket. Cet exemple peut être utilisé comme une simple bonne pratique WebSocket et nous fournit une référence pour développer des fonctions WebSocket plus avancé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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pour exécuter le projet ThinkPHP, vous devez : installer Composer ; utiliser Composer pour créer le projet ; entrer dans le répertoire du projet et exécuter php bin/console serve ; visiter http://localhost:8000 pour afficher la page d'accueil.

Avec le développement continu de la technologie Internet, la communication en temps réel est devenue un élément indispensable de la vie quotidienne. Une communication en temps réel efficace et à faible latence peut être obtenue grâce à la technologie WebSockets, et PHP, en tant que l'un des langages de développement les plus utilisés dans le domaine Internet, fournit également la prise en charge WebSocket correspondante. Cet article explique comment utiliser PHP et WebSocket pour établir une communication en temps réel et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ?

ThinkPHP dispose de plusieurs versions conçues pour différentes versions de PHP. Les versions majeures incluent 3.2, 5.0, 5.1 et 6.0, tandis que les versions mineures sont utilisées pour corriger les bogues et fournir de nouvelles fonctionnalités. La dernière version stable est ThinkPHP 6.0.16. Lorsque vous choisissez une version, tenez compte de la version PHP, des exigences en matière de fonctionnalités et du support de la communauté. Il est recommandé d'utiliser la dernière version stable pour de meilleures performances et une meilleure assistance.

PHP et WebSocket : meilleures pratiques pour le transfert de données en temps réel Introduction : Dans le développement d'applications Web, le transfert de données en temps réel est une exigence technique très importante. Le protocole HTTP traditionnel est un protocole de modèle requête-réponse et ne peut pas assurer efficacement la transmission de données en temps réel. Afin de répondre aux besoins de transmission de données en temps réel, le protocole WebSocket a vu le jour. WebSocket est un protocole de communication full-duplex qui permet de communiquer en full-duplex via une seule connexion TCP. Comparé à H

Étapes pour exécuter ThinkPHP Framework localement : Téléchargez et décompressez ThinkPHP Framework dans un répertoire local. Créez un hôte virtuel (facultatif) pointant vers le répertoire racine ThinkPHP. Configurez les paramètres de connexion à la base de données. Démarrez le serveur Web. Initialisez l'application ThinkPHP. Accédez à l'URL de l'application ThinkPHP et exécutez-la.

Comment JavaWebsocket implémente-t-il la fonction de tableau blanc en ligne ? À l’ère d’Internet moderne, les gens accordent de plus en plus d’attention à l’expérience de collaboration et d’interaction en temps réel. Le tableau blanc en ligne est une fonction implémentée sur la base de Websocket. Il permet à plusieurs utilisateurs de collaborer en temps réel pour modifier la même planche à dessin et effectuer des opérations telles que le dessin et l'annotation. Il constitue une solution pratique pour l'enseignement en ligne, les réunions à distance, la collaboration en équipe et. d'autres scénarios. 1. Contexte technique WebSocket est un nouveau protocole fourni par HTML5 qu'il implémente.

Dans cet article, nous comparerons les événements envoyés par le serveur (SSE) et les WebSockets, qui sont tous deux des méthodes fiables pour fournir des données. Nous les analyserons sous huit aspects, notamment la direction de la communication, le protocole sous-jacent, la sécurité, la facilité d'utilisation, les performances, la structure des messages, la facilité d'utilisation et les outils de test. Une comparaison de ces aspects est résumée comme suit : Catégorie Événement envoyé par le serveur (SSE) Direction de communication WebSocket Unidirectionnel Bidirectionnel Protocole sous-jacent HTTP Sécurité du protocole WebSocket Identique à HTTP Failles de sécurité existantes Facilité d'utilisation Paramètres Paramètres simples Performances complexes Vitesse d'envoi rapide des messages Affecté par le traitement des messages et la gestion des connexions Structure du message Texte brut ou binaire Facilité d'utilisation Largement disponible Utile pour l'intégration de WebSocket

Comment utiliser Java et WebSocket pour mettre en œuvre une cotation boursière en temps réel Introduction : Avec le développement rapide d'Internet, la cotation boursière en temps réel est devenue l'une des priorités des investisseurs. La méthode traditionnelle de poussée boursière présente des problèmes tels qu'un retard élevé et une vitesse de rafraîchissement lente. Pour les investisseurs, l'incapacité d'obtenir les dernières informations boursières en temps opportun peut entraîner des erreurs dans les décisions d'investissement. La cotation boursière en temps réel basée sur Java et WebSocket peut résoudre efficacement ce problème, permettant aux investisseurs d'obtenir les dernières informations sur le cours des actions dès que possible.
