前言:
一直想写一个关于这个项目的系列,当前此游戏目前处于下架过程中(运营不善,虽然本人还是挺喜欢这个游戏的).
距离开发已经一年多了.趁着还没忘光,就在此整理并共享出来.
能写多少算多少..弃坑勿怪...
先上一发服务器架构图:
考虑到当时项目的考量,以及后面用户群的表现.其实这个架构有点复杂了.以至于有点浪费.
首先,我们进行几个名词解释.
1.数据差异引擎:是使用一套数据协议和对象监听,保持多个不同位置(客户端/服务端或服务/服务端)之间的多个数据对象一致,一个主节点多个副节点同步的引擎,请参考之前的OpLog或者OpWeb文章
2.即时战斗:由于涉及到游戏的操作手感,所以服务端硬性要求是,60fps后端渲染,推送延迟低于50ms,玩家延迟100-150ms流畅运行.
3.数据通道:类似泡泡堂这类游戏,每个游戏都会进行5-10分钟,所以每个房间都会有一条数据通道,给参加游戏的玩家进行数据推送.
4.完全同步数据:不管用户什么时候加入战斗,总是可以获取到一份当前场景状态的拷贝,用于初始化当前这个时间点的对象.
5.差异同步数据:加入数据通道后,玩家基于完全同步数据使用差异同步数据,对当前内存中的对象进行合并,以保持所有客户端的显示一致.
其次,这里重点描述的是游戏服务器,也就是战斗服务器.至于其他的部分,有兴趣的话留言,视情况是否进行详细讲解.
游戏介绍,90坦克大战,80后大家都熟悉,这是一款坦克大战的网络版,当然进行了很多的修改和加强.网上搜搜"90坦克online"应该可以找到宣传片.
游戏中分为几个对象:
1.坦克 可上下左右移动,并且拥有3-4个技能,
2.地形 草地(不可破坏,但是可隐藏己方坦克),钢板(不可破坏),砖块(可破坏)
3.子弹 坦克都会发射出各种属性的子弹,子弹在生命周期结束的时候,会在目标地点创建一个爆裂物.
4.爆裂物 一般都由子弹创造,会对当前范围内的敌方坦克/可破坏地形进行破坏
5.技能 大多数都是创建一系列的不同的子弹,也有类似瞬移,隐身,回血,之类的.
大致的游戏介绍就到这里.
技术选型:
1.前端采用flash,导致我们无法使用udp进行网络层开发,也就是tcp协议.
2.后端采用c#开发,win2008服务,网络层采用iocp实现.
3.异步通讯架构,客户端发送指令,服务端仅返回是否受到(或者不返回).
4.客户端通过数据差异引擎中的场景镜像进行渲染.类似一个特定的数据播放器.
客户端活动图:
服务端活动图:
数据序列:
PS:今天刚画的图,有些记的不是特别的准,而且有些乱画的,凑合看..
多人即时战斗游戏服务端系列--90坦克Online网络版详解
原文地址:http://blog.csdn.net/icesun963/article/details/40823397