首页 > php框架 > ThinkPHP > 正文

Think-Swoole之WebSocket 事件订阅

发布: 2020-10-26 14:15:12
转载
2364 人浏览过

通过前面的实例中,如果按照之前的事件监听方式,客户端的每个场景事件,服务端都需要创建每个对应的事件,如果事件太多, app/listener 目录下将会有很多的文件(其实也不算什么坏现象),事件订阅就是为了解决这一问题,把所有的事件都写在一个文件中。

下面用事件订阅的方式处理事件

首先需要把之前在 app/event.php 监听的事件给注释掉,然后创建一个监听事件:php think make:listener SubTest 。

然后在 config/swoole.php 配置中的 websocket => subscribe 配置刚创建的监听文件:

'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;]);
    }
}
登录后复制

监听事件的方法命名规范:on+事件场景标识(驼峰命名)

用之前的前端页面进行测试,一切正常。

以上是Think-Swoole之WebSocket 事件订阅的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:阿dai哥
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!