You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Laravel控制器中获取Pusher频道订阅数的方法

在Laravel控制器中获取Pusher频道订阅数量的方法

核心前提:频道类型限制

Pusher并非所有频道都支持直接获取订阅数:

  • 公共频道:无认证机制,Pusher不跟踪在线用户,无法直接获取订阅数
  • 私有频道:同样无法通过API直接获取订阅数
  • Presence频道:支持获取在线用户列表,可通过列表长度得到订阅数

针对Presence频道的实现步骤

1. 确认依赖

Laravel的Broadcasting已集成Pusher PHP SDK,若未安装可通过composer补充:

composer require pusher/pusher-php-server

2. 在控制器中编写逻辑

直接使用Pusher官方SDK调用API获取在线用户数:

use Pusher\Pusher;
use Pusher\ApiErrorException;

public function getPresenceChannelCount()
{
    // 从Laravel配置中读取Pusher凭证
    $pusherConfig = config('broadcasting.connections.pusher');
    
    // 初始化Pusher客户端
    $pusher = new Pusher(
        $pusherConfig['key'],
        $pusherConfig['secret'],
        $pusherConfig['app_id'],
        [
            'cluster' => $pusherConfig['cluster'],
            'useTLS' => true
        ]
    );
    
    // 指定要查询的Presence频道名称(需以presence-开头)
    $channelName = 'presence-chat-room';
    
    try {
        // 获取频道在线用户列表
        $channelUsers = $pusher->getChannelUsers($channelName);
        // 统计订阅数量
        $subscriberCount = count($channelUsers->users);
        
        return response()->json([
            'channel' => $channelName,
            'subscriber_count' => $subscriberCount
        ]);
    } catch (ApiErrorException $e) {
        // 处理API调用错误(如频道不存在、权限不足等)
        return response()->json([
            'error' => $e->getMessage()
        ], 500);
    }
}

公共/私有频道的替代方案

对于公共或私有频道,需要自行实现订阅数统计:

  • 方案1:前端触发后端接口
    前端在成功订阅频道时调用后端接口,将计数+1;页面卸载时调用接口将计数-1(需处理异常情况,比如用户直接关闭页面的场景)
  • 方案2:Pusher Webhooks
    配置Pusher的webhook,监听member_added和member_removed事件(仅针对私有/Presence频道),在后端接收webhook请求时更新数据库中的计数

注意事项

  • 确保Pusher应用的API密钥具备访问频道信息的权限
  • 若使用Presence频道,需确保频道名称以presence-前缀开头
  • 处理API调用异常,避免因频道不存在或网络问题导致程序崩溃

内容的提问来源于stack exchange,提问作者amirreza prog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:40:21