swoole 在 TP 中的用法大概可以归为三类:listen(监听)、subscribe(订阅)、task(任务)。先说一下 listen 和 subscribe,这两种也是各种教程上出现最频繁的。
这三类用法,本质上都是使用 TP6 的“事件”实现的。简单的来说,就是我们先定义一些事件,然后注册listen监听或者subscribe订阅事件(在event.php中),之后就可以通过内部调用来触发事件了。
// 触发UserLogin事件
Event::trigger('UserLogin');
// 或者使用助手函数
event('UserLogin');
// 或者直接使用事件类触发
event('app\event\UserLogin');
swoole 用起来也和事件差不多,先注册,然后编写代码,再通过外部访问触发事件。
listen
-
注册
注册可以使用 think-swoole 自带的方式,也可以在 event.php 中进行注册。
<?php
// 事件定义文件 event.php
return [
'bind' => [
],
'listen' => [
//监听连接,swoole 事件必须以 swoole 开头,事件的首字母需要大写
'swoole.websocket.Test' => [
app\listener\WebsocketTest::class
],
],
];
-
创建监听事件
可以直接在app目录下创建listener目录,并且新建需要的类文件,开始编写代码;也可以进入项目目录,直接使用命令快捷生成:
php think make:listener WebsocketTest
-
编写代码,实现功能
创建成功后,每次触发事件都会执行 handle 方法
class WebsocketTest { public $websocket = null; /** * 注入容器管理类,从容器中取出Websocket类,或者也可以直接注入Websocket类, */ public function __construct(Container $container) { $this->websocket = $container->make(Websocket::class); } /** * 事件监听处理 * * @return mixed */ public function handle($event) { //回复客户端消息 $this->websocket->emit("testcallback", ['aaaaa' => 1, 'getdat