ホームページ  >  記事  >  PHPフレームワーク  >  Think-Swoole の WebSocket イベント サブスクリプション

Think-Swoole の WebSocket イベント サブスクリプション

藏色散人
藏色散人転載
2020-10-26 14:15:122327ブラウズ

前の例を通じて、前のイベント リスニング方法に従う場合、サーバーはクライアント上の各シーン イベントに対応する各イベントを作成する必要があります。イベントが多すぎると、アプリ内に多数のイベントが存在することになります。 /listener ディレクトリ ファイル (実際には悪い現象ではありません)、イベント サブスクリプションは、この問題を解決し、すべてのイベントをファイルに書き込むことです。

以下ではイベント サブスクリプションを使用してイベントを処理します

まず、app/event.php で以前にリッスンしていたイベントをコメント アウトし、リッスン イベントを作成する必要があります: php think make:listener サブテスト。

次に、新しく作成したリッスン ファイルを websocket で設定します => config/swoole.php 設定でサブスクライブします:

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

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;]);
    }
}

イベントをリッスンするメソッドの命名規則: イベント シーン識別子 (ハンプ命名)

前のフロントエンド ページでテストしたところ、すべてが正常でした。

以上がThink-Swoole の WebSocket イベント サブスクリプションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は阿dai哥で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。