MMO-SNS类游戏是一种在线角色之间存在交互,同时在线角色又可以同离线角色交互的游戏。这两种交互行为,决定了不同服务器之间的数据交互和常见的MMO类游戏存在很大差别。这类型一般会有下面两种类型的主服务器。
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类游戏服务器间数据交互策略分享相关推荐

  1. SNS类游戏cache server设计浅析

    http://blog.csdn.net/herm_lib/article/details/7477673 http://www.cppblog.com/jaxe/archive/2010/08/30 ...

  2. 棋牌类游戏服务器架构全面总结

    一.棋牌类服务器的特点 1,棋牌类不分区不分服 一般来说,棋牌游戏都是不分区不分服的.所以棋牌类服务器要满足随着用户量的增加而扩展的需要. 2,房间模式 即在同一局游戏中就是在同一个房间中,同一个房间 ...

  3. Android客户端与后台服务器的数据交互

    Android客户端与服务器的数据交互 这是今年7月份时在一家公司实训时自己做的一个小项目,仅仅是一个简单的模拟Android客户端与服务器的数据交互,中间会有串口通信,以及利用JDBC连接Mysql ...

  4. Vue第二天学习总结—— Vue全家桶之组件化开发(组件化开发思想、组件注册、Vue调试工具用法、组件间数据交互传递、组件插槽、基于组件的案例——购物车)

    (一) 组件化开发思想 1. 现实中的组件化思想体现 组件化即是对某些可以进行复用的功能进行封装的标准化工作 标准:要想组件能够成功组合在一起,每个组件必须要有标准 分治:将不同的功能封装到不同的组件 ...

  5. 前端笔记知识点整合之服务器Ajax(上)服务器PHP数据交互HTTP

    前端笔记知识点整合之服务器&Ajax(上)服务器&PHP&数据交互&HTTP 一.服务器 1.1 什么是服务器,做什么的? 服务器,就是放在机房中的电脑,和我们的电脑的 ...

  6. 组件间数据交互||父组件向子组件传值-基本使用|| 父组件向子组件传值-props属性名规则

    组件间数据交互 父组件向子组件传值 1. 组件内部通过props接收传递过来的值 2. 父组件通过属性将值传递给子组件 父组件向子组件传值-基本使用 <!DOCTYPE html> < ...

  7. 微信小程序连接emqx服务器实现数据交互

    微信小程序连接emqx服务器实现数据交互 emqx 申请链接 EMQX 是一款全球下载量超千万的开源物联网MQTT 服务器,高效可靠连接海量物联网设备,高性能实时处理消息与事件流数据,可运行在公有云. ...

  8. 系统间数据交互的方案探讨

    系统间数据交互的方案探讨 ===================================== 互联网时代, 1等公民是建立规范和协议的人 2等公民是提供服务的人 3等公民是开发软件的人 4等公 ...

  9. 游戏服务器如何修改属性,游戏服务器修改数据

    游戏服务器修改数据 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 规划数据服务 ...

  10. 大型MMO-SNS类游戏服务器架构

    SNS类型的游戏和RPG类的网游有一些不同的特点,而这些特点会导致这类游戏的后台架构和RPG网游的后台架构存在一些区别. SNS类型的游戏一般有以下的特点: (1)所有的玩家角色可能存在交互 SNS类 ...

最新文章

  1. 作为数据科学家,我都有哪些弱点
  2. service数据保存_「数据架构」数据流程图与实例-客户服务系统
  3. 创建web服务器||HTTP协议的概念||报文||HTTP请求与响应处理——未完待续
  4. 改正错误:tensorflow.python.framework.errors_impl.NotFoundError: FindFirstFile failed for: ...
  5. 【推荐】Google告诉你如何做移动搜索的
  6. SQL2005使用游标的实例(SBO中计算到期应收账款)
  7. 消息中间件--RabbitMQ --死信队列
  8. java机考_【Java】(机考常用)类集
  9. AndroidStudio_使用gradle添加依赖jar包_依赖模块---Android原生开发工作笔记78
  10. mysql主从延迟设置
  11. 软件工程需求分析文档模板
  12. YTU OJ 3229: 硬币组合
  13. php 通过API接口连接12306余票查询
  14. 面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我
  15. 大白菜 装系统 win7
  16. 索尼计算机bios正确设置,索尼笔记本电脑怎么进入Bios,小编教你如何四步完成
  17. 张鹏:腾讯云直播PCDN加速方案(附视频回放)
  18. tp6中的助手函数是什么意思?
  19. Python自动化第二周之数据模块
  20. jenkins windows slave 报错ERROR: Error cloning remote repo 'origin'

热门文章

  1. 邮箱显示exchange账号服务器错误,删除监视邮箱Exchange服务器不正常状态
  2. ubuntu mysql 升级_Ubuntu 升级mysql 之后的一些问题
  3. ORC File文件结构
  4. 人工智能十种“新”数学
  5. Two Sum(C、C++、Python)
  6. Computing the cost J(θ)----吴恩达机器学习作业
  7. python爬知识星球付费数据_Python 爬取知识星球数据
  8. LDA线性判别原理解析<数学推导>
  9. 《How to Write and publish a scientific paper》 Chapter 2
  10. 用 ElementTree 在 Python 中解析 XML