Node.js,Socket.io多用户应用程序 - 存储用户会话?

时间:2015-09-15 02:35:23

标签: node.js express redis socket.io amazon-dynamodb

我正在构建一个Node.js / Express应用程序来处理(可能)多达数千个并发用户。他们将输入信息(存储在DynamoDB中),然后在不同的房间之间进行交互。我将使用Socket.io来捕获和发出用户在这些房间中进行的操作(例如聊天)。

问题

我不确定在用户浏览应用程序和登录/注销时跟踪用户的最佳方式。我们无法在服务器上存储会话数据(例如room_id,user_settings),尤其是当服务器崩溃时。

我有两个想法,我可以使用一些建议:

  1. 直接从DynamoDB存储和检索会话数据。这似乎经常会对数据库造成很大的开销。
  2. 使用像Redis这样的内存缓存,并在写入时刷新到DynamoDB。我们需要数据在服务器崩溃的情况下持续存在。不确定这是否适用于成千上万的用户。
  3. 我是DynamoDB的新手,之前从未使用过Redis,所以任何建议都会有所帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

Redis是要走的路。它的安装非常简单,并且有用于用户会话的软件包,特别是如果您使用护照,例如passport.socketio。它将获取身份验证数据并使用sessionStore在某处存储会话。

您不需要该插件才能使其正常工作 - 您可以随时拥有自己的中间件,将会话保存到某个商店。我能想到的,足够快的选项是

  1. Redis的
  2. 文件存储
  3. 文件存储意味着您将会话保存为服务器上的文件,以便通过简单地读取文件而不是进行数据库查询来最小化读/写时间,这会随着时间的推移而变得昂贵。每个文件都有唯一的ID,因此查询速度非常快。这里的缺点是它很难维护 - 你会得到大量的文件夹和文件以及类似的东西

    另一方面,Redis专门为那些东西而建。它是一个内存存储器,可以选择在本地保存数据(这意味着如果Redis服务器在某个时刻死亡,您可以恢复它)。它非常快速有效,因为它在内存中。好处是它是一个独立的过程,您不必关心内存管理 - 您可以将其配置为使用特定数量,它将以您具有最佳性能的方式处理所有信息(当内存不足时,旧数据保存并内存不足。)

    所以我的建议是不要太担心未知 - Redis很简单,你会在几个小时(或最多几天)内习惯它。