作者:zhanhailiang 日期:2014-11-09

本文将介绍怎样基于express+redis高速实现实时在线用户数统计。

1. 在github.com上创建项目uv-tj。将其同步到本地:

[root@~/wade/nodejs]# git clone git@github.com:billfeller/uv-tj.git

2. 使用npm init初始化node项目(本例不须要复杂的操作,所以暂不使用express工具来生成express应用程序骨架):

[root@~/wade/nodejs/uv-tj]# npm init

3. 向package.json加入应用程序启动命令。例如以下:

{
"name": "uv-tj",
"version": "1.0.0",
"description": "uv tj demo",
"main": "app.js",
"scripts": {
"start": "node app.js"
},

"repository": {
"type": "git",
"url": "https://github.com/billfeller/uv-tj.git"
},
"keywords": [
"uv",
"tj",
"demo"
],
"author": "billfeller",
"license": "MIT",
"bugs": {
"url": "https://github.com/billfeller/uv-tj/issues"
},
"homepage": "https://github.com/billfeller/uv-tj",
"dependencies": {
"express": "^4.10.1",
"redis": "^0.12.1"

}
}

4. 加入app.js文件。代码例如以下:

// 创建express对象和一个redisclient连接
var express = require('express');
var redis = require('redis');
var db = redis.createClient();

var app = express();
 
// 纪录用户在线的中间件
// 这里使用user-agent作为用户标识符
// 这里使用sorted sets,以便查询近期N毫秒内在线的用户;
app.use(function(req, res, next) {
var ua = req.headers['user-agent'];
db.zadd('online', Date.now(), ua, next);
});
 
// 通过 zrevrangebyscore 来查询上一分钟在线用户。
// 我们将能得到从当前时间算起在 60,000 毫秒内活跃的用户。 app.use(function(req, res, next) {
var min = 60 * 1000;
var ago = Date.now() - min;
db.zrevrangebyscore('online', '+inf', ago, function (err, users) {
if (err) {
return next (err);
}
 
req.online = users;
next ();
});
});
 
// 从不同浏览器进入就能够看到同一时候在线用户数不断添加
app.get('/', function(req, res){
res.send(req.online.length + ' users online');
});
 
app.listen(3000);

5. 启动应用程序:

[root@~/wade/nodejs/uv-tj]# npm start
 
> uv-tj@1.0.0 start /root/wade/nodejs/uv-tj
> node app.js

訪问结果例如以下:

6. 总结:

使用此方法能够非常方便计算相似的统计量,如PV,UV。订单数等等。

个人觉得涉及计数器的需求都能够通过此方案来解决

7. 完整代码请见:

8. 推荐阅读:

基于express+redis高速实现实时在线用户数统计的更多相关文章

  1. 基于swoole+Redis的消息实时推送通知

    swoole+Redis将实时数据的推送 一 实现功能 设计师订单如果设计师未抢单,超时(5分钟)设计订单时时给设计师派送, 设计师公众号中收到派单信息 设计发布者收到派单成功信息 环境 centos ...

  2. 基于socket.io的实时在线选座系统

    基于socket.io的实时在线选座系统(demo) 前言 前段时间公司做一个关于剧院的项目,遇到了这样一种情况. 在高并发多用户同时选座的情况下,假设A用户进入选座页面,正在选择座位,此时还没有提交 ...

  3. Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室

    一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...

  4. 基于tomcat获取在线用户数

    https://blog.csdn.net/smallnetvisitor/article/details/84697505 需求: 统计某应用的在线用户数 实现方案: 1.基于session监听(复 ...

  5. Feathers JS – 基于 Express 构建数据驱动的服务

    Feathers 是一个轻量的 Web 应用程序框架,基于 NodeJS 最流行​​的 Web 框架——Express.这使得它很容易使用 socket.io 来创建 RESTful Web 服务和实 ...

  6. websocket 无需通过轮询服务器的方式以获得响应 同步在线用户数 上线下线 抓包 3-way-handshake web-linux-shell 开发

    https://code.google.com/archive/p/phpwebsocket/source/default/source The WebSocket API (WebSockets) ...

  7. 基于express框架的应用程序骨架生成器介绍

    作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样使用express-generator工具高速生成基于express框架的应用程序骨架: 1. 安装express-gener ...

  8. 基于PCIe的高速接口设计

    基于PCIe的高速接口设计 由 judyzhong 于 星期四, 03/03/2016 - 13:49 发表 作者:李晓宁,姚远程,秦明伟 2016年微型机与应用第1期 摘要:PCIe总线是第三代I/ ...

  9. FPGA和DSP间基于SRIO的高速通信系统设计

    作者:陈婷,岳强,汪洋 解放军信息工程大学 摘要: 现代信号处理系统通常需要在不同处理器之间实现高速数据通信,SRIO协议由于高效率.低延时的特性被广泛使用.本文研究了在FPGA和DSP两种处理器之间 ...

随机推荐

  1. 路飞学城Python-Day12(practise)

    # 函数基础# 1.写函数,计算传入数字参数的和(动态传参)# def sum_num(x,y):# return x+y# print(sum_num(1,2))# 2.写函数,用户传入修改的文件名 ...

  2. 将对象a的属性赋值给对象b

    BeanUtils.copyProperties(a,b); 将a的属性赋值给b(ab的共同属性)

  3. POJ 1821 Fence(单调队列优化DP)

    题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...

  4. numpy学习笔记 - numpy常用函数、向量化操作及基本数学统计方法

    # -*- coding: utf-8 -*-"""主要记录代码,相关说明采用注释形势,供日常总结.查阅使用,不定时更新.Created on Fri Aug 24 19 ...

  5. Java基础学习总结(8)——super关键字

    一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象.怎么去引 ...

  6. root用户删除文件提示:Operation not permitted

    root用户删除文件提示:Operation not permitted http://blog.csdn.net/evanbai/article/details/6187578

  7. Material Design学习之 Button(具体分析,传说中的水滴动画)

    转载请注明出处:王亟亟的大牛之路 上一篇大致介绍了Material Design的一些基本概念传送门:http://blog.csdn.net/ddwhan0123/article/details/5 ...

  8. xcode5. 安装cocos2d-x 学习中。。。

    找了一些帖子  没搞出来,后来找到原因了   如今的cocos2d版本号在xcode.5上 没右模版了. 用命令行 来运行.看了官方的文档.最终攻克了--- 对于自己解决的问题都会感到点兴奋. .. ...

  9. SQL Server 2008 备份数据库

    1.打开SQL , 找到要备份的数据库 , 右键 >> 任务 >>备份 2.弹出 [ 备份数据库对话框 ] ,如图: 3.点击加入 [ button ] . 例如以下图: 4. ...

  10. WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)

    之前啊,我们提及到,对于update和delete,若不带where条件,则对所有记录都有效. 一.WHERE条件表达式 (1)对记录进行过滤,如果没有指定WHERE子句,则显示所有记录. (2)在W ...