我们目前正致力于基于php,html和javascript的战略网络浏览器游戏。 该计划是让10,000多名用户在同一个世界中玩游戏。
目前我们正在使用memcached:
在后面我们有一个运行并保存所有游戏数据的mysql服务器。当通过ObjectLoader加载对象时,它按以下顺序加载:
我们使用面向对象的方法构建整个游戏,其中始终在对象之间进行功能。由于这个原因,我们认为我们已经设法获得了一个很好的结构,并且在memcached的帮助下,我们在与游戏交互时收到了来自客户端 - 服务器的良好请求时间。
我知道memcache没有同步,也不常用于在内存中保存完整的游戏。在服务器启动后的开始,第一次将对象加载到内存缓存中时的加载时间会很长,但是在服务器上线一段时间后,大多数加载来自内存缓存,负载将大大减少。
目前我们正在将更改的对象同时保存到内存缓存和数据库中。之前我们曾想过只在一定时间或间隔后将对象保存到数据库中,但由于存在内存/服务器出现故障时风险不一致,我们现在暂时忽略它。
客户端对服务器的请求通常返回对象的状态简单的json格式而不更改对象,而对象又在视觉上用图像和javascript在浏览器中表示。但有时根据上次更新对象的时间,它会使用新信息更新它们(例如,构建队列保持计划建筑物的时间进度增加,和/或计划 - 队列 - 项目 - 阵列已更改)。 / p>
更新
由于它只是一个“普通网页”(没有applet,flash等),我们正在实施游戏,以便服务器是唯一一个持有“真实游戏状态”的人......不同的javascript的状态客户端上的对象更像是服务器游戏状态的近似版本。
有时候,在你做某些重要的事情之前,客户的视觉状态会更新到服务器的状态(例如客户可以买得起军营的东西,要求服务器建造营房,服务器更新当前资源到服务器上的收入数据,然后尝试建立一个营房或转换错误消息,然后将资源,建筑物上的当前服务器状态发送回客户端)..
这不是一款快节奏的游戏lika真正的策略游戏。更像是一个相当慢的3-4个月的游戏时间游戏,建筑物可以花费+1分钟到几天完成。
答案 0 :(得分:0)
不一致是否实际上是一个问题取决于你如何实现你的游戏。如果整个游戏都经常在客户端使用明确的快照进行更新,那么玩家只会获得更高的延迟(延迟是不可避免的)并不重要。如果你的游戏状态不同步,那么两个玩家的世界版本可能会在一段时间后以完全不同的方向漂移,这是你想要避免的。
但你确定你真的需要memcache吗?它似乎为您的解决方案增加了更多的复杂性和潜在的不一致性。这可能是一个不成熟的优化。您已经依赖于数据库,如果您只是单独使用数据库,那么性能如何?如果设置正确,我希望您的数据库服务器无论如何都要缓存RAM中的所有内容。