1

我有一个应用程序需要限制活动连接的数量,而对我来说最合乎逻辑的方法是简单地计算活动会话的数量。

我搜索了“节点快速会话计数”,但没有找到任何有用的东西。

是否可以在 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);
    }); 
4

2 回答 2

1

使用Store.length(fn)方法。在默认的 Connect 内存存储中,它是这样写的:

MemoryStore.prototype.length = function(fn) {
  fn(null, Object.keys(this.sessions).length);
};

所以你会这样称呼它:

store.length(function(len) {
  // we have len number of sessions
});
于 2013-10-24T13:22:47.957 回答
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

于 2021-01-15T22:41:15.833 回答