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

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

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

本文档提供了在网页上实时显示当前在线人数的多种实现方法,包括使用 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 secondssetInterval(fetchUserCount, 5000);fetchUserCount();</script>
</body>
</html>

方法三:使用第三方服务

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

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

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

http://www.lryc.cn/news/519729.html

相关文章:

  • Linux第一个系统程序---进度条
  • vscode 无法使用npm, cmd命令行窗口可以正常执行
  • Leetcode 967 Numbers With Same Consecutive Differences
  • node.js中实现token的生成与验证
  • [C++11]_[初级]_[工作线程如何监听主线程条件变量wait_for方法的使用]
  • Openstack持久存储-Swift,Cinder,Manila三者之间的区别
  • 深度学习第三弹:python入门与线性表示代码
  • 解决报错记录:TypeError: vars() argument must have __dict__ attribute
  • SpringBoot 原理篇(day14)
  • Vscode辅助编码AI神器continue插件
  • Type-C单口便携显示器-LDR6021
  • 青少年编程与数学 02-006 前端开发框架VUE 19课题、内置组件
  • 腾讯云AI代码助手编程挑战赛 - 使用 JavaScript 构建一个简易日历
  • Xcode 正则表达式实现查找替换
  • 学习flv.js
  • FreePBX 17 on ubuntu24 with Asterisk 20
  • 【算法】算法大纲
  • 【MySQL】SQL菜鸟教程(一)
  • 安装本地测试安装apache-doris
  • 【Apache Paimon】-- 13 -- 利用 paimon-flink-action 同步 mysql 表数据
  • IOS HTTPS代理抓包工具使用教程
  • 在 Ubuntu 22.04 上从 Wayland 切换到 X11的详细步骤
  • 【Linux】4.Linux常见指令以及权限理解(2)
  • ffmpeg aac s16 encode_audio.c
  • vue3监听器
  • 03-51单片机定时器和串口通信
  • 系统架构设计师考点—项目管理
  • 代码随想录算法训练营第三十二天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
  • 【2024年华为OD机试】 (A卷,100分)- 总最快检测效率(Java JS PythonC/C++)
  • 【大数据】Apache Superset:可视化开源架构