前の例を通じて、前のイベント リスニング方法に従う場合、サーバーはクライアント上の各シーン イベントに対応する各イベントを作成する必要があります。イベントが多すぎると、アプリ内に多数のイベントが存在することになります。 /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('\think\swoole\Websocket'); } //连接事件 public function onConnect() { $this -> websocket -> emit('sendfd',$this -> websocket -> getSender()); } //加入房间 public function onJoin($event) { $this -> websocket -> join($event['room']); $this -> websocket -> emit('joincallback','加入房间成功'); } public function onRoomTest($event) { $this -> websocket -> to($event['room']) -> emit('roomtestcallback',$event['message']); } }
イベントをリッスンするメソッドの命名規則: イベント シーン識別子 (ハンプ命名)
前のフロントエンド ページでテストしたところ、すべてが正常でした。
以上がThink-Swoole の WebSocket イベント サブスクリプションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。