多人游戏是否总是从每个客户请求的数据库中请求数据?

那么我不知道这个问题的标题是否合适,但我不知道如何把这个几句话。

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

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

这是我第一次开发游戏,所以我不知道事情是如何工作的。 我只知道我希望服务器速度很快。 我select维护内存中的所有内容,主要是因为所有关于多人游戏开发的例子和教程都没有提到数据库。

谢谢!

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

1)I / O操作昂贵。

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

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

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

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

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

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

听起来像你已经有你的答案:由于状态只有一个会议完成后才重要,只有在该会话完成时才存储数据。 存储中间值没有用处,只会减慢速度。

Node.js是一个相对较新的开发平台,它是否能够支持这样一个系统是不确定的。 至于什么是正常完成 – 尽可能多的信息存储在客户端,首先,然后服务器通常保存在内存中的数据,或者,至less,我知道这是stream行的游戏英雄联盟,世界魔兽争霸“和”星际争霸II“。 再次,这些应用程序不是HTML / Node.js,对系统的要求非常高,而且是由很多开发公司 – 可能是数据库方法适用于较小的游戏,我从来没有听说过。