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

Laravel 9中如何获取直播实时观看人数?(co-streamer+plyr环境)

实时观看人数统计方案推荐

一、替代轮询的更优技术方案

  • WebSocket 双向通信:这是比Ajax轮询高效得多的方案,服务器可主动推送观看人数变化,无需客户端反复发起请求,延迟更低、服务器负载更小。
    • 实现思路:在co-streamer端维护在线连接计数,每个观众打开页面时建立WebSocket连接,计数加一;断开连接时计数减一。当人数变化时,服务器主动向所有连接的客户端推送最新数值,Plyr侧监听WebSocket消息,实时更新页面显示。
    • 简化代码示例:
      客户端:
      const ws = new WebSocket('ws://your-co-streamer-server/ws/viewers');
      ws.onmessage = (event) => {
        const viewerCount = JSON.parse(event.data).count;
        document.getElementById('viewer-count').textContent = `${viewerCount} 人观看`;
      };
      window.addEventListener('beforeunload', () => ws.close());
      
      服务器端(假设co-streamer基于Node.js扩展):
      const WebSocket = require('ws');
      const wss = new WebSocket.Server({ port: 8080 });
      let viewerCount = 0;
      
      wss.on('connection', (ws) => {
        viewerCount++;
        wss.clients.forEach(client => {
          if (client.readyState === WebSocket.OPEN) {
            client.send(JSON.stringify({ count: viewerCount }));
          }
        });
      
        ws.on('close', () => {
          viewerCount--;
          wss.clients.forEach(client => {
            if (client.readyState === WebSocket.OPEN) {
              client.send(JSON.stringify({ count: viewerCount }));
            }
          });
        });
      });
      
  • Server-Sent Events (SSE):如果WebSocket实现复杂,SSE是轻量的单向服务器推送技术,自带重连机制,适合仅需服务器向客户端发数据的场景,实现成本更低。
    • 客户端代码示例:
      const eventSource = new EventSource('/stream-viewers');
      eventSource.onmessage = (event) => {
        const viewerCount = event.data;
        document.getElementById('viewer-count').textContent = `${viewerCount} 人观看`;
      };
      

二、现成工具/集成方案

  • co-streamer 原生扩展:优先查看co-streamer官方文档,确认是否有内置的观看人数统计模块或社区插件,原生集成的方案兼容性最佳,无需从零开发。
  • Socket.io:封装了WebSocket及降级方案(如轮询),支持房间功能,可按不同流区分观看人数,多流场景下更易用。在co-streamer端集成Socket.io后,Plyr客户端通过其监听人数变化即可。
  • Redis 原子计数+推送:用Redis的INCR/DECR原子命令维护观看人数(观众连接时加一,断开时减一),再结合WebSocket/SSE将Redis中的计数推送给客户端,适合高并发场景,计数准确且性能稳定。
  • Countly:开源用户分析工具,支持实时在线用户统计,可集成到流媒体场景中,除了观看人数,还能追踪观众播放行为等附加数据。

三、实用优化点

  • 过滤无效连接:通过监听Plyr的play事件,仅将正在播放视频的用户计入观看人数,避免页面打开但未播放的闲置连接干扰统计。
  • 异常处理:添加WebSocket/SSE断开后的自动重连逻辑,避免人数显示停滞;服务器端将计数持久化到Redis,防止服务重启后数据丢失。

内容的提问来源于stack exchange,提问作者Muhammad Shah Sawar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:00:58