MMO-SNS类游戏服务器间数据交互策略分享
OnlineSvr实现一些MMO的业务逻辑,实现像做任务、战斗、NPC AI、视野管理和消息同步等行为。
OfflineSvr 实现一些离线类的SNS业务逻辑。注意,这个服务器涉及到操作离线角色的一些数据。
OnlineSvr和OfflineSvr的数据交互有一点讲究。简单以角色的EXP做为交互例子。有一个角色R,在OnlineSvr1上,他的经验值记为EXP;有另外一个角色,是R的好友,记为RF吧,在OnlineSvr2上。这个例子我只考虑R的EXP变化。
交互策略一
流程
1. R登录后,从OfflineSvr获取EXP1。
2. R执行某个行为后,获取了一些EXP,总的EXP就变成了EXP2,OnlineSvr1把EXP2同步到OfflineSvr。
3. 以此同时,OnlineSvr2上的RF获取了OfflineSvr的R的经验值EXP1。接着RF执行对R的某种SNS行为(比如挑战,挑战过程R不知道),R也可以获取一些经验,R的总经验变成了EXP3,最后OnlineSvr2也会把EXP3同步到OfflineSvr。
注意上面两个步骤是同时进行的,而且谁先同步都不确定。
4. OfflineSvr收到EXP2和EXP3,最终EXP变成EXP2或EXP3都是不对的,有一部分的EXP丢失了。
从上面流程描述可以看出,直接用总量数据进行服务器间数据同步,业务并行时,同步会出错。
交互策略二
1. R登录后,从OfflineSvr获取EXP1。
2. R执行某个行为后,获取了一些EXP,总的EXP就变成了EXP2,OnlineSvr1把增加的EXP,就是增量DeltaExp传给到OfflineSvr。
3. 以此同时,OnlineSvr2上的RF获取了OfflineSvr的R的经验值EXP1。接着RF执行对R的某种SNS行为,R也可以获取一些经验,OnlineSvr2也将增加的EXP DeltaEXP3传给OfflineSvr。
4. OfflineSvr收到DeltaEXP2和DeltaEXP3,最终将DeltaEXP2和DeltaEXP3家到EXP1上。
5. OfflineSvr传DeltaEXP3给OnlineSvr1;或者,OnlineSvr1主动获取DeltaEXP3。OnlineSvr1上的EXP1和OfflineSvr保持一致。
交互策略三
交互策略二存在点问题,DeltaEXP如果丢失了,OnlineSvr和OfflineSvr的EXP1将会不一致。对策略二的处理方法做点改进。
1. R登录后,从OfflineSvr获取EXP1。
2. R执行某个行为后,获取了一些EXP,总的EXP就变成了EXP2,OnlineSvr1把EXP2同步到OfflineSvr。
3. 以此同时,OnlineSvr2上的RF获取了OfflineSvr的R的经验值EXP1。接着RF执行对R的某种SNS行为, R也可以获取一些经验,OnlineSvr2将增加的EXP DeltaEXP3传给OfflineSvr。
4. OfflineSvr收到EXP2和DeltaEXP3,最终将EXP1替换成 EXP2,并且把DeltaEXP3保存起来。
5. OnlineSvr1主动获取DeltaEXP3,将DeltaEXP3加到EXP2,又将结果同步到OfflineSvr。
其他问题
这类服务器数据交互,可以归纳为下面三个要素:
1. 基准数据服务器
相同的数据有多份副本在不同服务器上,应用要确定以哪个服务器上为准。基准服务器的确定,是由业务特点决定的,一般哪个服务器数据改变频率最高,就可以以该服务器上的数据为基准数据。这样可以减少服务器间的数据同步或通知的频率,减少流量,减少数据不一致的时间长度。
2. 全量数据同步和增量数据通知
上面的EXP1,2,3就是全量数据,DeltaEXP3就是增量数据。同步全量数据到另外一个服务器,还是通知增量数据,由哪一方是基准数据服务器决定。
3. 服务器对增量数据实时性要求
处理OnlineSvr和OfflineSvr中的数据实时性方法不一样。
OnlineSvr需要及时获取变化数据方法
当位于OnlineSvr2上的其他角色让EXP(EXP是OnlineSvr1上一个角色的EXP)发生变化时,记EXP变化量为DeltaEXP ,OnlineSvr1不能及时知道。 下面是一种比较安全的处理过程:
① OnlineSvr2通知DeltaEXP到OfflineSvr,OfflineSvr保存DeltaEXP。
② OfflineSvr向OnlineSvr1发一个通知,某个角色EXP发生变化了。
③ OnlineSvr1从OfflineSvr取DeltaEXP。
④ DeltaEXP被取走后,OfflineSvr将DeltaEXP清0。
转载于:https://www.cnblogs.com/herm/archive/2012/03/09/2773910.html
MMO-SNS类游戏服务器间数据交互策略分享相关推荐
- SNS类游戏cache server设计浅析
http://blog.csdn.net/herm_lib/article/details/7477673 http://www.cppblog.com/jaxe/archive/2010/08/30 ...
- 棋牌类游戏服务器架构全面总结
一.棋牌类服务器的特点 1,棋牌类不分区不分服 一般来说,棋牌游戏都是不分区不分服的.所以棋牌类服务器要满足随着用户量的增加而扩展的需要. 2,房间模式 即在同一局游戏中就是在同一个房间中,同一个房间 ...
- Android客户端与后台服务器的数据交互
Android客户端与服务器的数据交互 这是今年7月份时在一家公司实训时自己做的一个小项目,仅仅是一个简单的模拟Android客户端与服务器的数据交互,中间会有串口通信,以及利用JDBC连接Mysql ...
- Vue第二天学习总结—— Vue全家桶之组件化开发(组件化开发思想、组件注册、Vue调试工具用法、组件间数据交互传递、组件插槽、基于组件的案例——购物车)
(一) 组件化开发思想 1. 现实中的组件化思想体现 组件化即是对某些可以进行复用的功能进行封装的标准化工作 标准:要想组件能够成功组合在一起,每个组件必须要有标准 分治:将不同的功能封装到不同的组件 ...
- 前端笔记知识点整合之服务器Ajax(上)服务器PHP数据交互HTTP
前端笔记知识点整合之服务器&Ajax(上)服务器&PHP&数据交互&HTTP 一.服务器 1.1 什么是服务器,做什么的? 服务器,就是放在机房中的电脑,和我们的电脑的 ...
- 组件间数据交互||父组件向子组件传值-基本使用|| 父组件向子组件传值-props属性名规则
组件间数据交互 父组件向子组件传值 1. 组件内部通过props接收传递过来的值 2. 父组件通过属性将值传递给子组件 父组件向子组件传值-基本使用 <!DOCTYPE html> < ...
- 微信小程序连接emqx服务器实现数据交互
微信小程序连接emqx服务器实现数据交互 emqx 申请链接 EMQX 是一款全球下载量超千万的开源物联网MQTT 服务器,高效可靠连接海量物联网设备,高性能实时处理消息与事件流数据,可运行在公有云. ...
- 系统间数据交互的方案探讨
系统间数据交互的方案探讨 ===================================== 互联网时代, 1等公民是建立规范和协议的人 2等公民是提供服务的人 3等公民是开发软件的人 4等公 ...
- 游戏服务器如何修改属性,游戏服务器修改数据
游戏服务器修改数据 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 规划数据服务 ...
- 大型MMO-SNS类游戏服务器架构
SNS类型的游戏和RPG类的网游有一些不同的特点,而这些特点会导致这类游戏的后台架构和RPG网游的后台架构存在一些区别. SNS类型的游戏一般有以下的特点: (1)所有的玩家角色可能存在交互 SNS类 ...
最新文章
- 作为数据科学家,我都有哪些弱点
- service数据保存_「数据架构」数据流程图与实例-客户服务系统
- 创建web服务器||HTTP协议的概念||报文||HTTP请求与响应处理——未完待续
- 改正错误:tensorflow.python.framework.errors_impl.NotFoundError: FindFirstFile failed for: ...
- 【推荐】Google告诉你如何做移动搜索的
- SQL2005使用游标的实例(SBO中计算到期应收账款)
- 消息中间件--RabbitMQ --死信队列
- java机考_【Java】(机考常用)类集
- AndroidStudio_使用gradle添加依赖jar包_依赖模块---Android原生开发工作笔记78
- mysql主从延迟设置
- 软件工程需求分析文档模板
- YTU OJ 3229: 硬币组合
- php 通过API接口连接12306余票查询
- 面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我
- 大白菜 装系统 win7
- 索尼计算机bios正确设置,索尼笔记本电脑怎么进入Bios,小编教你如何四步完成
- 张鹏:腾讯云直播PCDN加速方案(附视频回放)
- tp6中的助手函数是什么意思?
- Python自动化第二周之数据模块
- jenkins windows slave 报错ERROR: Error cloning remote repo 'origin'
热门文章
- 邮箱显示exchange账号服务器错误,删除监视邮箱Exchange服务器不正常状态
- ubuntu mysql 升级_Ubuntu 升级mysql 之后的一些问题
- ORC File文件结构
- 人工智能十种“新”数学
- Two Sum(C、C++、Python)
- Computing the cost J(θ)----吴恩达机器学习作业
- python爬知识星球付费数据_Python 爬取知识星球数据
- LDA线性判别原理解析<数学推导>
- 《How to Write and publish a scientific paper》 Chapter 2
- 用 ElementTree 在 Python 中解析 XML