好吧,我不知道这个问题的标题是否合适,但是我不知道如何用几句话来表达。
我目前正在使用服务器端的NodeJS和Socket.io和客户端的HTML5开发多人2D游戏。除非他们完成游戏,否则该游戏无需保存玩家进度。而且我必须确保有关球员的所有信息(例如得分和帮助)始终有效。因此,我决定将这些信息集中在服务器上,这样客户端就永远不会将分数发送到服务器,而是根据服务器发送的信息来计算分数并将其发送给所有客户端。除此之外,我可以让这个游戏的不同阶段进行,至少要有2位玩家和最多4位玩家。
最初,我决定用始终将游戏 session 数据保存在内存中的服务器来实现这一点,但是现在我在问自己是否不应该使用数据库来存储此数据。我使用数据库仅在 session 数据完成时存储它们,因为我没有用完未完成的 session 数据。但是,我应该在播放过程中将 session 和播放器数据保留在数据库中吗?我的问题是,客户端与服务器之间的通信非常频繁,采用这种方法,我必须首先从数据库中请求其数据,进行必要的更改,将其存储回数据库中,然后对每个客户端请求重复此过程。也许答案很明显,但是我应该改用这种方法吗?
这是我第一次开发游戏,所以我不知道事情通常如何运作。我只知道我想让服务器更快。我之所以选择保留所有内容,主要是因为我发现的有关多人游戏开发的所有示例和教程都从未提及数据库。
谢谢!
最佳答案
我还在使用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会导致很大的效率损失。
关于html - 多人游戏是否应该始终根据每个客户端请求从数据库请求数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14340105/