以这种方式将memcache与php web浏览器游戏一起使用有问题吗? 背景
我们目前正在开发一款基于php、html和javascript的战略web浏览器游戏。 计划是让10000多名用户在同一个世界内玩游戏 目前,我们正在使用memcached来:以这种方式将memcache与php web浏览器游戏一起使用有问题吗? 背景,php,memcached,browser,Php,Memcached,Browser,我们目前正在开发一款基于php、html和javascript的战略web浏览器游戏。 计划是让10000多名用户在同一个世界内玩游戏 目前,我们正在使用memcached来: 存储json静态数据、语言文件 存储可更改的序列化php类对象 (例如军队、存货清单、, 单元(集装箱、建筑物等) 在后面,我们有一个mysql服务器运行并保存所有游戏数据。通过ObjectLoader加载对象时,对象按以下顺序加载: 检查中的静态哈希映射 对象的脚本 检查memcache是否已经存在 你已经装进去了
- 存储json静态数据、语言文件
- 存储可更改的序列化php类对象 (例如军队、存货清单、, 单元(集装箱、建筑物等)
- 你知道这是怎么回事吗 我们在这里瞎走路
- 你希望我们有很多机会吗 如果有人加载,则会出现不一致性问题 并更新memcache对象 而其他人也这么做
- 这样做是否可行 他做了吗?看起来很有效 很好,但到目前为止我们只有 4个人同时在线吗 时间
- 其他缓存程序更合适吗 对于此类对象方法,比 内存缓存
- 对于这种情况,你还有其他的建议吗
它不像真正的战略游戏那样是一款快节奏的游戏。更像是一款相当缓慢的3-4个月游戏时间的游戏,其中建筑物可能需要+1分钟到几天才能完成。不一致性是否真的是一个问题取决于你如何实现你的游戏。如果整个游戏在客户端用最终快照更新通常情况下,这并不重要,因为玩家只会获得更高的延迟(延迟是不可避免的)。如果你的游戏状态不同步,两个玩家的世界版本可能会在一段时间后向完全不同的方向漂移,这是你想要避免的
但是你确定你真的需要memcache吗?这似乎给你的解决方案增加了更多的复杂性和潜在的不一致性。这可能是过早的优化。你已经依赖于数据库,如果你只使用数据库,性能会怎么样?如果设置正确,我希望你的数据库服务器能够缓存我所需要的一切n内存。如果正确理解这一点,您将定期(比如每分钟左右)从客户端汇集服务器以获取新信息?游戏是否在用户之间进行了大量交互(两个用户是否可能会相互更改缓存项)?缓存的项目平均有多大?它都是以固定的时间间隔汇集在一起的,比如每分钟一次,这样地图就会显示出一个非常接近的视图,而且甚至当用户在地图上滚动时,它也会要求一个新的副本。现在,如果两个用户更新了对象,那么他们可能会尝试更新同一个对象ame地图视图。如果有人在地图上监视你的军队,他会在请求地图内容时更新它。一种解决方案可能是在更新非你自己的对象时锁定它们。或者干脆让地图内容更新依赖于不断的服务器更新……据我所知,与数据库相比,memcached具有良好的可扩展性随着活跃用户数量的增长。目前,如果客户要求在其当前11x11平铺地图屏幕中显示所有内容,则打开memcache需要0.2秒,关闭memcache需要0.6秒。这可能是因为当我们设计整个系统时,我们一直在考虑memcache,试图在memcache打开时优化内容。正如您所指出的可能会增加更多的复杂性和不一致性,但现在重写所有代码已经太晚了。。