我有一个应用程序,我需要限制活动连接的数量,对我这样做的最合理的方法是简单地计算活动会话的数量。
我搜索过“节点快速会话计数”,但没有找到任何有用的信息。
是否可以在node express中获取打开的会话数?
另一种方法是保存每个连接客户端的IP地址,但此方法的问题是需要从数据存储区手动删除IP地址。
我想如果我使用redis作为数据存储,我可以使用expire来实现类似的东西。
set ip.192.168.42.1 true
expire ip.192.168.42.1 60
ttl ip.192.168.42.1
etc etc
或者有更好的方法吗?
我已经尝试过使用MemoryStore的建议,但我似乎无法弄清楚如何使用它?
var express = require("express");
var MemoryStore = express.session.MemoryStore;
MemoryStore.prototype.length = function(fn) {
fn(null, Object.keys(this.sessions).length);
};
MemoryStore.length(function(len) {
console.log('sessions:'+len);
});
答案 0 :(得分:1)
使用Store.length(fn)
方法。在默认的连接内存存储中,它的编写方式如下:
MemoryStore.prototype.length = function(fn) {
fn(null, Object.keys(this.sessions).length);
};
所以你会这样称呼它:
store.length(function(len) {
// we have len number of sessions
});
答案 1 :(得分:0)
我很清楚这篇文章有多老,但我想我会分享我的方式,因为这是我试图弄清楚的最佳结果。
这就是我所做的,它似乎奏效了。
因此,如果您使用 MySQLStore 和 Express Session,您可以像这样处理它,
将 activeUsers 添加到您的选项(app/index.js):
var options = {
host: process.env.DB_HOST,
port: 3306,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
activeUsers: 0
};
在您的 login.js 中添加:
req.sessionStore.options.userCount += 1
并在您注销时:
req.sessionStore.options.userCount += 1
现在我不确定会话超时是否会返回到 0,但我认为它会返回。然后只需创建一个引用 userSession 计数的 app.local