【问题标题】:Storing Temporary Variables in NodeJS在 NodeJS 中存储临时变量
【发布时间】:2017-11-17 21:51:41
【问题描述】:

我刚刚开始尝试使用 NodeJS 和 socket.io 创建一个简单的多人在线游戏(类似于在线国际象棋的想法)。如果我的问题的答案真的很明显,我深表歉意,因为我已经尝试过谷歌搜索,但我认为我缺少一些关键的理解。

基本上,我需要在应用程序运行时在服务器上存储一些东西。例如:

  • 我需要存储哪些套接字连接是主机,哪些是播放器。
  • 我需要存储每场比赛的当前状态(例如,在国际象棋的情况下,棋子在哪里以及轮到谁了)
  • 如果能够存储所有 socket.io“房间”也很好。

此时请随意回答问题,以下信息仅供参考。

我在网上尝试或看到了一些东西:

  • 当我使用“持久性”搜索某些内容时,我会根据保存到数据库或其他内容获得结果,我认为这不是我想要的。
  • 我尝试在 NodeJS 文件的顶部添加变量,就像在普通 JS 文件中添加全局变量一样。这似乎可行,但我感觉不对,如果有人能解释这是如何工作的,那就太好了。
  • 我还看到了称为会话变量的东西,我想这可能是我想要的。
  • 我见过一些应用程序通过在客户端和服务器之间来回传递信息来做到这一点,但我希望客户端不能仅仅通过编辑信息来“破解”游戏。

感谢任何帮助或解释。

【问题讨论】:

  • 通常当人们谈论持久性或会话时,他们想要在应用程序生命周期之外持续存在的东西。在运行时存储应用程序所需的数据正是变量的用途。在 Node 中,顶级变量是模块(即文件)的本地变量,因此污染全局空间不是问题。没有具体细节,很难给出更好的答案。
  • 感谢您的回答,真的很有帮助。

标签: node.js session websocket socket.io session-variables


【解决方案1】:

保存到数据库没有错。如果您的服务器崩溃并在几秒钟后重新启动,您并不真的希望每个人的数据都被删除。我认为您正在以数据库总是长期且缓慢的方式来考虑它。但实际上,有一些数据库技术非常适合这类事情,并且经常与 socket.io 一起使用。

我可能会选择Redis,它速度非常快,可以将数据存储在内存中。这意味着它不会不断地写入磁盘,并且在像 MySQL 那样拥有完整的持久性存储和通过变量将其保存在 Node 内存中的略微狡猾的方法之间有点折衷。

当 reddit 创建“Place”,即拥有大量并发用户的大型多人绘图时,他们同时使用了 Redis 和 Cassandra。 You can read a bit about it here.

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多