Project1

标题: 如何在线上游戏中较为节省带宽地读取非当前地图的信息 [打印本页]

作者: 小秋橙    时间: 2022-1-23 02:06
标题: 如何在线上游戏中较为节省带宽地读取非当前地图的信息
当前地图的动态信息是$gameMap,静态信息如note/meta是$dataMap,而所有地图的一些仅供编辑器使用的信息(如编辑器中名称、树状关系)是$dataMapsInfo,
我现在想读取一个非当前地图的信息(比如该地图的note/meta这种信息,或者地图中“拥有某某meta属性的事件”的坐标这种动态信息),
除了直接现场加载该地图的json文件(这样应该只能读到静态的)外有无更加节省带宽(考虑到在线游戏)的方式?

ps: 不太想把这些“需要跨地图读取的信息”手动挪到MapsInfo或其他公共json文件中写,因为我在做一个面向其他游戏作者的样板工程,如果这些很基本的数据没法在官方编辑器里修改会很让人困扰的。
开局加载一遍所有地图的文件然后把需要的信息保存在什么全局变量里可能也是一个办法,但是会使得瞬间的加载压力过大,而且应该也处理不了动态信息。
作者: 小秋橙    时间: 2022-11-2 20:54
捞一捞,有人能回答吗?
作者: rfvtgbzxc    时间: 2022-11-3 11:45
浏览器有304缓存的。访问一次后再次请求,服务器会让浏览器直接从玩家缓存文件中读取;如果服务器再对绝对不会修改的资源加上expires或者Cache-Control字段,浏览器后续连向服务器请求也不会做,直接读缓存,但是这样会导致这部分资源更新不及时。总之流量不会成为太大的问题。
读取非当前地图的信息,并且要求能读取“动态信息”,实际上这个信息并不真的动态,否则就要保存到存档里了。这样理解的话问题依然还在“如何降低大量访问地图有关数据的带宽压力”的范畴,压力不在服务器。如果只是meta的话,读取文件然后自己解析确实是比较浪费性能的方法(流量/带宽方面有缓存影响不大),但是想要获取到所有地图的这类消息,读取所有文件又是不得不做的,可以基于读取的结果自己构建缓存,这样只有第一次卡,后面就不卡了,其实也还好。觉得依然有点“亏”的话,还是得自己构建一个$dataMapsInfo这样的子表。基于前端工程化技术,使用模版工程的开发者其实不需要再去填写新的数据库,因为模版开发者可以使用webpack、vite等打包工具自己定义一个test/build的流程,其中包含将所有地图数据的该类信息提取整合为一个类似$dataMapsInfo文件的行为。而后游戏开始把该文件也作为数据库的一部分读取即可。注意为了保持单一的数据源,这么做以后$gameMap初始化时的meta数据也要从这里取。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1