이전 예를 통해 이전 이벤트 수신 방법을 따르면 클라이언트의 각 장면 이벤트에 대해 서버에서 해당 이벤트를 각각 생성해야 합니다. 이벤트가 너무 많으면 앱에 파일이 많아집니다. 리스너 디렉터리(사실 나쁜 현상은 아닙니다.) 이벤트 구독은 이 문제를 해결하고 모든 이벤트를 파일에 기록하는 것입니다.
다음은 이벤트 구독을 사용하여 이벤트를 처리합니다
먼저 app/event.php에서 이전에 수신된 이벤트를 주석 처리한 다음 수신 이벤트를 생성해야 합니다. php는 make:listener SubTest를 생각하세요.
그런 다음 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']); } }
메소드 이름 지정 이벤트 듣기 사양: on+이벤트 장면 식별(혹 이름 지정)
이전 프런트 엔드 페이지에서 테스트한 결과 모든 것이 정상입니다.
위 내용은 Think-Swoole의 WebSocket 이벤트 구독의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!