RPG和SNS类游戏的cache server设计和实现区别随笔
2012-04-19 15:09
246 查看
把平时对cache这块内容的思考、实践总结一下。
游戏的cache server的设计和实现策略由游戏逻辑特点决定。RPG和SNS类用户(这里用户指游戏中的玩家帐号和角色)行为特征不一样,他们的cache server实现策略也存在不同。
RPG类的cache server实现起来比较简单一些。
大部分情况以玩家帐号和角色ID作为key,处理查增改删的功能。
查询
先看cache中有没有对应key的数据,有,直接返回;没有从持久化设备处查询,查到了,更新cache。
增加和更新
很多时候,这两个功能要一起实现。增加一条记录大部分情况要有返回值。
应用要增加一条记录,要确定一下,他是否存在了,存在的话,就更新一下cache。同时记录一下,这条记录已经改过的(一般称为"脏数据"),经过一定的时间后,会被同步到持久化设备中。
如果新增的记录确实不存在,往cache里增加一条记录,也把这条记录做个标记,过段时间将数据写到持久化设备中。
这里说一下针对不同数据采用不同写入持久化设备优先级的方法。我用的方法比较直接简单,启用多个队列,不同的队列代表不同的写入优先级。有更新的数据,将其放到某个优先级队列中,到了时间,这些改变的数据将会被写到持久化设备。
删除
先把cache中的数据拿掉,接着删除持久化设备的数据。
接下来说一下SNS类游戏的cache server实现策略
SNS类游戏和RPG不同地方:
(1) A会直接操作R,改变R的某些数据;有时候,B也会同时改变R的数据。
(2) 很多时候,游戏服务器上的R在某些数据被其他角色改变后,须要知道哪些数据被改变了,保证在一定的时间拿到新数据。
针对上面两点,cache server还要提供增量改变数据和提供改变通知的功能。
一种是,R数据变了,只要R在线就通知R。
另外一个种是,R告诉cache server要通知的数据,这样cahce server上的R的数据被改了,如果R在线,而且确定改的数据是要通知的数据,才要告诉R,哪些数据被改了。
根据上面的介绍,图方便的开发人员,可以看看有没有现成的第三方cache server可以直接用,比如memcache,redis之类能否满足业务要求。
总结一下,SNS类的cache server的功能是RPG类的cache server超级。能用到sns类的通用cache server也可以满足RPG类的游戏。
游戏的cache server的设计和实现策略由游戏逻辑特点决定。RPG和SNS类用户(这里用户指游戏中的玩家帐号和角色)行为特征不一样,他们的cache server实现策略也存在不同。
RPG类的cache server实现起来比较简单一些。
大部分情况以玩家帐号和角色ID作为key,处理查增改删的功能。
查询
先看cache中有没有对应key的数据,有,直接返回;没有从持久化设备处查询,查到了,更新cache。
增加和更新
很多时候,这两个功能要一起实现。增加一条记录大部分情况要有返回值。
应用要增加一条记录,要确定一下,他是否存在了,存在的话,就更新一下cache。同时记录一下,这条记录已经改过的(一般称为"脏数据"),经过一定的时间后,会被同步到持久化设备中。
如果新增的记录确实不存在,往cache里增加一条记录,也把这条记录做个标记,过段时间将数据写到持久化设备中。
这里说一下针对不同数据采用不同写入持久化设备优先级的方法。我用的方法比较直接简单,启用多个队列,不同的队列代表不同的写入优先级。有更新的数据,将其放到某个优先级队列中,到了时间,这些改变的数据将会被写到持久化设备。
删除
先把cache中的数据拿掉,接着删除持久化设备的数据。
接下来说一下SNS类游戏的cache server实现策略
SNS类游戏和RPG不同地方:
(1) A会直接操作R,改变R的某些数据;有时候,B也会同时改变R的数据。
(2) 很多时候,游戏服务器上的R在某些数据被其他角色改变后,须要知道哪些数据被改变了,保证在一定的时间拿到新数据。
针对上面两点,cache server还要提供增量改变数据和提供改变通知的功能。
一种是,R数据变了,只要R在线就通知R。
另外一个种是,R告诉cache server要通知的数据,这样cahce server上的R的数据被改了,如果R在线,而且确定改的数据是要通知的数据,才要告诉R,哪些数据被改了。
根据上面的介绍,图方便的开发人员,可以看看有没有现成的第三方cache server可以直接用,比如memcache,redis之类能否满足业务要求。
总结一下,SNS类的cache server的功能是RPG类的cache server超级。能用到sns类的通用cache server也可以满足RPG类的游戏。
相关文章推荐
- RPG和SNS类游戏的cache server设计和实现区别随笔
- RPG游戏地图设计与实现
- 《游戏脚本的设计与开发》-(RPG部分)3.3 加入多个人物以及对话实现
- 一种2D游戏引擎的设计与实现
- 游戏引擎中的多渲染器的设计与实现(1)
- 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python
- 游戏开发设计模式之子类沙盒模式(unity3d 示例实现)
- vue+webpack实现精美游戏设计:实现建筑物的渐变生成效果
- 游戏内统一支付系统设计与实现
- 游戏引擎/GUI的设计与实现-主题
- go实现一个简单的游戏服务器框架(lotou)基本设计
- iOS关灯游戏AI的设计和实现
- 一个MIDP俄罗斯方块游戏的设计和实现
- 【unity学习笔记】手机RPG游戏中角色移动方式实现
- Java中2.5D游戏(斜45度角)的设计与实现(2) 推荐
- 数独游戏的设计与实现
- 移动互联网实战--社交游戏的排行榜设计和实现(1)
- 一种2D游戏引擎的设计与实现
- 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)