4

嗯,我不知道这个问题的标题是否合适,但我不知道如何用几句话来表达。

我目前正在开发一个多人 2D 游戏,在服务器端使用 NodeJS 和 Socket.io,在客户端使用 HTML5。这个游戏不需要保存玩家的进度,除非他们完成它。而且我必须确保所有关于球员的信息,例如得分和帮助,都是有效的。所以我决定将这些信息集中在服务器上,这样客户端就不会向服务器发送分数,而是根据发送的信息计算分数并将它们发送给所有客户端。除此之外,我可以在最少 2 名玩家和最多 4 名玩家的情况下运行这个游戏的不同会话。

起初我决定用服务器来实现这个,总是在内存中维护游戏会话数据,但现在我质疑自己是否应该使用数据库来存储这些数据。我只在会话数据完成时才使用数据库来存储会话数据,因为我对未完成的会话数据没有用处。但是我应该在他们玩的时候维护数据库中的会话和玩家数据吗?我的问题是客户端与服务器的通信非常频繁,使用这种方法,我必须首先从数据库请求他们的数据,进行必要的更改,将其存储回数据库,然后对每个客户端请求重复此过程。也许这个问题的答案很明显,但我应该改用这种方法吗?

这是我第一次开发游戏,所以我不知道事情通常是如何运作的。我只知道我希望服务器速度快。我选择将所有内容都保存在内存中,主要是因为我发现的所有关于多人游戏开发的示例和教程都没有提到数据库......

谢谢!

4

3 回答 3

5

我还在使用 node.js 和 socket.io 开发多人游戏。您不应该在每个客户端请求上访问数据库,因为,

1) I/O 操作代价高昂。

读/写数据库是“昂贵的”(慢)。从内存中读取和写入要快得多。

2) I/O 操作在 Node.js 中应该是异步的。

function read_or_alter_database(input, function(callback){ update_the_client(); });

这使得数据库操作非阻塞:应用程序的其余部分仍将运行,直到操作完成。然后,执行回调函数。如果玩家的客户端依赖数据库访问来更新游戏状态,那么这就变成了阻塞操作(因为数据库操作完成后游戏才能继续),这否定了 Node.js 的主要目的。

3) 多人游戏中会有大量的客户端请求。

这个加点 1 会导致很大的效率损失。

于 2013-01-15T18:11:49.123 回答
0

Sounds like you already have your answer: Since the state is only important once a session is complete, only store the data upon completion of that session. Storing the intermediate values serves no purpose, and only slows things down.

于 2013-01-15T18:15:22.063 回答
-1

Node.js 是一个相对较新的开发平台——不确定它是否能够支持这样的系统。就通常所做的而言 - 尽可能多的信息首先存储在客户端,然后服务器通常将数据保存在内存中,或者,至少,我知道流行游戏英雄联盟、世界就是这种情况魔兽争霸和星际争霸II。再说一遍,这些应用程序不是 HTML/Node.js,对系统要求非常高,并且是由大型开发公司开发的 - 可能 DB 方法适用于较小的游戏,我只是从未听说过.

于 2013-01-15T14:50:45.437 回答