利用 Cache 减少传输的数据量
今天研究 wow 时候发现,他 cache 了很多的信息。我们可以在 WDB 目录下找到这些 cache 文件。没有仔细去研究这些文件到底放了些什么,但是由此却想到一些东西。
我们在做 mmo 的服务器的时候,有些信息,数据量很大,却并非经常变动。比如物品的细节描述,工会/帮派信息,甚至还有好友列表等等。在 IM 软件中, cache 住朋友列表到本地硬盘是很常用的手法,不过我参与的几个 MMO 项目都没有这样做。
其实,这些不易变的信息,在 client 需要获取的时候,只需要在请求协议中加入一个自己 cache 的信息包的校验值过去就可以了。server 校对自己一方的校验值,当判断与 client 相同的时候,就不需要重发这些信息了。
很多信息都可以如法炮制,扩展开看,还可以是 npc 对话,任务描述等等。
Comments
没错, 有点意思, 是可以CACHE..又学到一招:d
Posted by: yongzhi.wu | (14) September 20, 2007 02:30 PM
wow 本地存的主要是item的描述,属性,人物对话,物品 tooltip, 任务描述和id
每次server 更新后会从头再来,由于wow的live patch不多,每个版本之间对item 修改也不多,所以还是够用的
Posted by: ironarmor | (13) March 7, 2007 04:12 PM
cache和包的聚合是一回事吗?
Posted by: Atry | (12) March 18, 2006 06:24 PM
TCP 是基于流的,服务器应该做包的聚合,(当然有些游戏应该做却没做,比如大话)。逻辑的包十几个字节,但是聚合以后,每次 send 的数据就不只了。
ps. cache 主要减少服务器发送的负担,而现在游戏服务器一般不会拿 windows 做 ;)
Posted by: Cloud
| (11)
March 18, 2006 01:26 PM
但是实际上,网络在转发一个512字节的数据包和16字节的数据包开销是一样的?
一样的?不缓存应该确实差不多,但是ws2_32.dll会做缓冲。
Posted by: Atry | (10) March 18, 2006 09:18 AM
同意云风的这个想法,很多东西一开始就可以Canche到客户端的.而且也是可随着服务器的变化而变化的,只要做好相应的版本管理功能就差不多了.就像SVN、VSS这些文件管理系统一样。
Posted by: blankdark | (9) March 17, 2006 11:00 AM
好友信息可以save到local的,但是好友列表不用,因为好友列表是变化的。
物品描述信息是从服务器发送到客户端的,但是记录在本地没有太大意义,因为:
描述信息是合在属性信息中一起发送的,如果有时候发送,有时候不发送,会使得机制变得复杂;似乎不发送描述信息可以节省网络带宽,但是实际上,网络在转发一个512字节的数据包和16字节的数据包开销是一样的,而物品描述信息一般都是单独发送的,大部分情况下是小包,如果试图去优化掉这些内容,实际上并没有获得任何结果。减少拼装的次数或许能节约服务器端的CPU资源,但是实际上服务器的CPU资源瓶颈并不是这里。
Cache只有缓存那些很少变化,但是频繁交互的或交互数据量大的才有意义。
Posted by: wuyazhui | (8) March 7, 2006 09:56 AM
好友列表这些数据放到本地不太合适把,因为用户有可能会在其他机器上修改自己的好友列表,这样就要同步数据。物品的细节描述什么的倒可以放在本地.
Posted by: sunway | (7) March 2, 2006 05:11 PM
理论上想cache什么都可以,只要你有相应的cache体系(主要就是更新同步,游戏中很多东西之间都有依赖关系,所以说是cache体系),毕竟cache同临时文件有区别。
当然搭建一个对应的cache体系是有代价的...
Posted by: zenberg | (6) March 2, 2006 03:55 PM
可惜flash能在本地硬盘放的信息太少了,只能适合这些大型游戏。RIA和Ajax还是不行
Posted by: Atry | (5) March 2, 2006 11:55 AM
还有一个Super cache,就是Skype。
Posted by: Hank | (4) March 2, 2006 10:30 AM
可以有个比较时不时上次推出时的信息包
Posted by: ALL开拓者 | (3) March 1, 2006 06:03 PM
固定不一定是恒定,有更新和同步的问题。
Posted by: Cloud
| (2)
March 1, 2006 05:43 PM
NPC的对话、任务描述这种东西如果是固定的话不是可以放在客户端吗?
Posted by: santa | (1) March 1, 2006 05:33 PM