Maison  >  Article  >  cadre php  >  Abonnement à l'événement WebSocket de Think-Swoole

Abonnement à l'événement WebSocket de Think-Swoole

藏色散人
藏色散人avant
2020-10-26 14:15:122376parcourir

Dans l'exemple précédent, si vous suivez la méthode d'écoute d'événements précédente, le serveur doit créer chaque événement correspondant pour chaque événement de scène sur le client. S'il y a trop d'événements, il y en aura beaucoup dans l'application. /listener file (en fait, ce n'est pas un mauvais phénomène), l'abonnement aux événements consiste à résoudre ce problème et à écrire tous les événements dans un fichier.

Ce qui suit utilise l'abonnement aux événements pour traiter les événements

Tout d'abord, vous devez commenter les événements précédemment écoutés dans app/event.php, puis créer un événement d'écoute : php think make:listener Sous-test.

Configurez ensuite le fichier d'écoute nouvellement créé dans websocket => abonnez-vous dans la configuration config/swoole.php :

'websocket'  => [
        .
        .
        .
        'listen'        => [],
        'subscribe'     => [
           \app\listener\SubTest::class
        ],
],

Définissez les événements qui doivent être écoutés dans app/listener/SubTest. php :

<?php
declare (strict_types = 1);
namespace app\listener;
class SubTest
{
    protected $websocket = null;
    public function __construct()
{
        $this -> websocket = app(&#39;\think\swoole\Websocket&#39;);
    }
    //连接事件
    public function onConnect()
{
        $this -> websocket -> emit(&#39;sendfd&#39;,$this -> websocket -> getSender());
    }
    //加入房间
    public function onJoin($event)
{
        $this -> websocket -> join($event[&#39;room&#39;]);
        $this -> websocket -> emit(&#39;joincallback&#39;,&#39;加入房间成功&#39;);
    }
    public function onRoomTest($event)
{
        $this -> websocket -> to($event[&#39;room&#39;]) -> emit(&#39;roomtestcallback&#39;,$event[&#39;message&#39;]);
    }
}

La convention de nommage de la méthode d'écoute des événements : on+event scene identifier (hump naming)

Testé avec la page front-end précédente, tout est normal.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer