Table des matières
Exigences en matière d'environnement
Créer un projet
创建控制器
注册路由
编写 WebSocket 通信逻辑
配置 WebSocket 服务
运行 WebSocket 服务
rrreee
Maison cadre php PensezPHP Implémentation de la diffusion Websocket à l'aide de ThinkPHP6

Implémentation de la diffusion Websocket à l'aide de ThinkPHP6

Jun 20, 2023 am 08:41 AM
thinkphp websocket 广播

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
Copier après la connexion

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"
}
Copier après la connexion

完成后,运行以下命令进行安装:

composer install
Copier après la connexion

创建控制器

接下来,我们需要创建一个控制器来处理 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)
    {
    }
}
Copier après la connexion

在上面的代码中,我们继承了 thinkswooleWebsocket 类,并重写了其中的三个方法:

  • onOpen 方法用于监听连接事件;
  • onMessage 方法用于监听接收消息事件;
  • onClose 方法用于监听关闭事件。

当前,这些方法并没有做任何事情,接下来我们将会在这些方法中添加 WebSocket 通信的逻辑。

注册路由

在控制器创建好之后,我们需要在路由中进行注册。在 app/route.php 文件中添加以下内容:

use thinkacadeRoute;

Route::post('/ws', 'Websocket@onMessage')->middleware(    hinkmiddlewareAllowCrossDomain::class);
Copier après la connexion

这里使用了 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;
    }
}
Copier après la connexion

配置 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,
];
Copier après la connexion

在上面的代码中,我们通过配置文件告诉应用程序如何启动 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
Copier après la connexion

Websocket 服务已经启动,你可以通过访问你的应用程序来测试它。你可以使用这个地址:ws://your-domain:9501/wsrrreee

Une fois terminé, exécutez la commande suivante pour installer :

rrreee

Créer un contrôleur de contrôle

Ensuite, 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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment exécuter le projet thinkphp Comment exécuter le projet thinkphp Apr 09, 2024 pm 05:33 PM

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.

Comment réaliser une communication en temps réel en utilisant PHP et WebSocket Comment réaliser une communication en temps réel en utilisant PHP et WebSocket Dec 17, 2023 pm 10:24 PM

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 ?

Il existe plusieurs versions de thinkphp Il existe plusieurs versions de thinkphp Apr 09, 2024 pm 06:09 PM

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 : bonnes pratiques pour le transfert de données en temps réel PHP et WebSocket : bonnes pratiques pour le transfert de données en temps réel Dec 18, 2023 pm 02:10 PM

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

Comment exécuter thinkphp Comment exécuter thinkphp Apr 09, 2024 pm 05:39 PM

É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 Java Websocket implémente-t-il la fonction de tableau blanc en ligne ? Comment Java Websocket implémente-t-il la fonction de tableau blanc en ligne ? Dec 17, 2023 pm 10:58 PM

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.

SSE et WebSocket SSE et WebSocket Apr 17, 2024 pm 02:18 PM

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 poussée des cotations boursières en temps réel Comment utiliser Java et WebSocket pour mettre en œuvre une poussée des cotations boursières en temps réel Dec 17, 2023 pm 09:15 PM

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.

See all articles