[已解决]关于 webman/push 私有频道如何动态根据订阅userId推送

南宫春水

问题描述

use Webman\Push\Api;
$api = new Api(
    // webman下可以直接使用config获取配置,非webman环境需要手动写入相应配置
    'http://127.0.0.1:3232',
    config('plugin.webman.push.app.app_key'),
    config('plugin.webman.push.app.app_secret')
);
$userId=1;
// 给订阅 user-1 的所有客户端推送 message 事件的消息
$api->trigger('private-user-'.$userId, 'message', [
    'from_uid' => 2,
    'content'  => '你好,这个是消息内容'
]);

$userId在不写死的情况下,如何监听或者获取到当前订阅的$userId,并根据当前订阅$userId,单独推送消息呢?

193 1 0
1个回答

walkor 打赏

比如这段代码放控制器里,然后客户端传递要发送的userid

  • 南宫春水 24天前

    我一直是在process目录下定义一个类,通过Timer进行推送。按您这样说,那么我可否在push中auth认证的控制器中进行推送?

    public function getUserPushAuth(Request $request):Response
        {
            $uid = JwtToken::getCurrentId();
            if($uid){
                $pusher = new Api(str_replace('0.0.0.0', '127.0.0.1', config('plugin.webman.push.app.api')), config('plugin.webman.push.app.app_key'), config('plugin.webman.push.app.app_secret'));
                $channel_name = $request->post('channel_name');
    
                $api = new Api(
                    'http://127.0.0.1:3232',
                    config('plugin.webman.push.app.app_key'),
                    config('plugin.webman.push.app.app_secret')
                );
                //推送K线
                Timer::add(1, function () use ($api,$uid) {
    //                var_dump($uid);
                    $api->trigger('private-user-'.$uid,'message', time());
                });
    
                return response($pusher->socketAuth($channel_name, $request->post('socket_id')));
    
            }
            return response('Forbidden', 403);
        }
  • walkor 24天前

    认证就做认证,不要在认证里推送,前端不一定收到,因为前端还没收到认证的返回数据

  • 南宫春水 24天前

    那总要一个触发的契机吧?

    var user_channel = connection.subscribe('private-user-1');
    user_channel.on('client-message', function (data) {
        // 
    });
    user_channel.trigger('client-message', {form_uid:2, content:"hello"});
    

    这样,如何去定位控制器?

  • walkor 24天前

    什么时候触发,怎么触发根据自己业务写代码

  • 南宫春水 16天前

    谢谢

  • 南宫春水 16天前

    使用Timer一直推送数据,那么每个人订阅私有频道的人,或者取消订阅后。会不会导致内存累积。如果会,在webman/push中应该怎么删除timer

  • walkor 15天前

    一直添加又不删除定时器会导致内存泄露,删除定时器用接口Timer::del()

×
🔝