节点快速会话计数

时间:2013-10-24 13:04:23

标签: node.js express

我有一个应用程序,我需要限制活动连接的数量,对我这样做的最合理的方法是简单地计算活动会话的数量。

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

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

2 个答案:

答案 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