当前位置: 首页 > article >正文

前端实时显示当前在线人数的实现

实时显示当前在线人数的实现

本文档提供了在网页上实时显示当前在线人数的多种实现方法,包括使用 WebSocket 实现实时更新和轮询方式实现非实时更新。


方法一:使用 WebSocket 实现实时更新

服务器端设置

通过 Node.js 和 WebSocket 库(如 ws)实现服务器端逻辑:

// server.js
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

let activeUsers = 0;

server.on('connection', (socket) => {
    activeUsers++;
    broadcastActiveUsers();

    socket.on('close', () => {
        activeUsers--;
        broadcastActiveUsers();
    });
});

function broadcastActiveUsers() {
    server.clients.forEach((client) => {
        if (client.readyState === WebSocket.OPEN) {
            client.send(activeUsers);
        }
    });
}

console.log('WebSocket server is running on ws://localhost:8080');

客户端设置

在前端页面,通过 JavaScript 使用 WebSocket 获取实时用户数量:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Active Users</title>
</head>
<body>
    <h1>当前在线人数:<span id="user-count">0</span></h1>

    <script>
        const userCountElement = document.getElementById('user-count');
        const socket = new WebSocket('ws://localhost:8080');

        socket.onmessage = (event) => {
            userCountElement.textContent = event.data;
        };
    </script>
</body>
</html>

方法二:使用后端轮询(非实时)

服务器端逻辑

可以使用 Express.js 来提供一个 RESTful 接口:

// Example: Express.js server
const express = require('express');
const app = express();

let activeUsers = 0;

app.get('/active-users', (req, res) => {
    res.json({ activeUsers });
});

// Simulate user activity (for demonstration)
setInterval(() => {
    activeUsers = Math.floor(Math.random() * 100);
}, 1000);

app.listen(3000, () => console.log('Server running on http://localhost:3000'));

客户端逻辑

通过 fetch 定期获取用户数量:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Active Users</title>
</head>
<body>
    <h1>当前在线人数:<span id="user-count">0</span></h1>

    <script>
        const userCountElement = document.getElementById('user-count');

        async function fetchUserCount() {
            try {
                const response = await fetch('http://localhost:3000/active-users');
                const data = await response.json();
                userCountElement.textContent = data.activeUsers;
            } catch (error) {
                console.error('Failed to fetch user count:', error);
            }
        }

        // Poll every 5 seconds
        setInterval(fetchUserCount, 5000);
        fetchUserCount();
    </script>
</body>
</html>

方法三:使用第三方服务

如果不想自己实现,可以使用以下工具:

  • Google Analytics(GA):设置并显示实时用户统计。
  • PusherFirebase:提供实时数据库和 WebSocket 功能。

选择适合的方案以满足实际需求。


http://www.kler.cn/a/504463.html

相关文章:

  • Springboot 注解缓存使用教程
  • 源码安装httpd2.4
  • lerna使用指南
  • spring cloud的核心模块有哪些
  • 战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具
  • java小知识点总结
  • 淘宝 URL 采集商品详情数据的常见方法
  • 如何最小改变架构,快速实现流控的?(第34讲)
  • 第 6 课 Python函数和模块
  • 高性能现代PHP全栈框架 Spiral
  • 大学无人机低空经济专业建设技术详解
  • iOS layer.mask 的原理
  • AI自动化编程:天使还是恶魔?
  • RAG实战_01代码生成_02智能检索
  • 深入剖析 Java 设计模式之观察者模式
  • aws(学习笔记第二十三课) step functions进行开发(lambda函数调用)
  • G1原理—3.G1是如何提升垃圾回收效率
  • 【大数据】机器学习 -----关于data.csv数据集分析案例
  • 如何在Ubuntu上安装和配置Git
  • LLM 智能视频字幕助手,支持生成、断句、优化、翻译、视频合成全流程
  • 从0开始学习搭网站第二天
  • 《计算机网络》课后探研题书面报告_网际校验和算法
  • SLAM后端处理
  • uniapp 小程序 五星评分精确到0.1
  • Lua语言的软件开发工具
  • 设计模式-工厂模式/抽象工厂模式