2017-11-17 1006 views
1

我刚开始尝试使用NodeJS和socket.io创建一个简单的多人在线游戏(与在线国际象棋类似的想法)。我很抱歉,如果我的问题的答案真的很明显,因为我试着用google搜索,但我认为我错过了一些关键的理解。在NodeJS中存储临时变量

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

  • 我需要存储哪些套接字连接是主机,哪些是播放器。
  • 我需要存储每个游戏的当前状态(例如在国际象棋中,棋子的位置以及棋子的位置)
  • 能够存储所有socket.io文件也是很好的“房间”。

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

有迹象表明,我曾尝试或在网上看到几件事情:

  • 当我谷歌的东西与“持久性”,我得到基于保存到数据库什么的结果,我不认为这就是我要的。
  • 我试过在NodeJS文件的顶部添加变量,就像我在普通的JS文件中使用全局变量一样。这似乎工作,但只是感觉错了,如果有人可以解释如何运作,这将是伟大的。
  • 我也看到了所谓的会话变量,我想这可能是我想要的。
  • 我见过的应用程序只是通过在客户端和服务器之间传递信息来实现这一点,但我更希望客户端不能只编辑信息来“破解”游戏。

任何帮助或解释赞赏。

+2

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

+0

感谢您的回答,真的很有帮助。 – Zack

回答

1

保存到数据库没有错。如果您的服务器在几秒钟后崩溃并重新启动,您并不希望每个人的数据都被删除。我想你正在考虑数据库总是长期和缓慢的方式。但是真的,这种类型的事物有很好的数据库技术,并且经常与socket.io一起使用。

我可能会选择的那个是Redis,这是超快速的,并将数据存储在内存中。这意味着它不会不断地写入磁盘,而且在像MySQL一样拥有完全持久性存储空间和通过变量将其保存在节点内存中的方法稍微有点方便之间,它还有点半途而废。

当reddit创建“Place”时,他们使用Redis和Cassandra一起使用Redis和Cassandra进行大规模多人绘制。 You can read a bit about it here