游戏服务器体系结构

本文描述了一个我所设计的游戏服务器体系结构,其目的是实现游戏服务器的动态负载平衡,将对象从繁忙的服务器转移到相对空闲的服务器中.设计并没有经过具体的测试与验证,仅仅是将自己目前的一些想法记录下来.随着新构思的出现,可能会有所变化.

以下是服务器的逻辑视图,其中忽略了管理和监控模块

--------------------------------------------------------
|逻辑服务|碰撞服务|AOI服务|dateserver|AI|寻路|交易服务|
--------------------------------------------------------
    /\      /\        /\      /\      /\  /\     /\
    ||      ||        ||      ||      ||  ||     ||
    \/      \/        \/      \/      \/  \/     \/
---------------------------------------------------------
                  消息转发层
---------------------------------------------------------
                         /\
                         ||
                         \/
                       ------
                       |gate|
                       ------
                         /\
                         ||
                         \/
                      --------
                      |client|
                      --------

具体实现中消息转发层可作为单独的一组服务运行,也可以作为单独的服务器
进程中的单独一层.

目前在我的设计方案中,将其作为进程中的一个服务层实现.
--------------
|  应用层    |
-----------
|数据转发层| |
-----------
|  网络层    |
--------------

各层说明

应用层: 具体应用,例如游戏逻辑,AI,等.

数据转发层:处理消息的路由,将消息投递到正确的套接口发送队列中.

网络层:收发数据.同时支持TCP,UDP等协议.

当接收消息时,无须通过第二层,从网络层直接将接收到的完整消息投递到

应用层中.

发送消息时,从应用层将消息传进数据转发层,并且指定消息通知方式(例如通

过TCP将消息传递到某一台服务器,还是通过udp方式将消息广播出去),由转发层将消息投递到正确的套接口中.

基本消息流如下:

1)客户端发起操作

2)AOI服务,AOI处理的主要是对象的位置信息,以及各对象所关注的其它对象.

以下举例说明几种处理:

对于行走,AOI计算出能观察到此玩家的所有对象然后将这些信息一起打包,转到3.

对于攻击行为,AOI计算出此攻击将影响的对象和可以观察到此次攻击的对象,然后将信息打包,转发到3.

对于仅仅影响自己属性的消息,例如喝血,如果有对象关注你,例如组队.则将关注你对象打包,转发到4.

3)碰撞和校验,根据地图信息,校验操作的合法性,并进一步计算操作所影响对的象.例如对于行走,在没有详细地图信息的AOI中,无法知道玩家之间是否隔了一堵墙,在碰撞和校验中,将把墙另一面的所有对象从可观察对象中去除.当通过校验后,对于行走消息,将玩家的新坐标通知给所有可以观察到的对象,并更新AOI在的玩家坐标.如果是攻击动作,则把所有信息打包,并送往4.

4)逻辑处理.将处理结果通知关注的对象.

对于跨服数据的处理

服务器的设计实现了动态负载平衡,和无缝大地图,以使得在一台服务器上的对象,可以观察到并影响另一台服务器上对象的变化.以下说明跨服攻击,

假设A,与B分别处理两台不同的逻辑服务器SA,SB上.A向B发动进攻,并且已经通过了校验.当B进入A可观察范围内的时候,SB会获得一份A的基本数据的副本,对于这份副本在SB上是只读的.SB计算出此次攻击对A的影响,例如血减少多少,然后将对A的数据更改要求发送到SA.SA实际修改A的数据,并将更新广播出去,所有关注A的服务器都会处理这个更新信息,并做出合适的处理.

对于玩家间的物品交易,买卖,赠送等操作,都将交由交易服务器处理,以实现跨服的交易.

以上仅仅是概要说明,一些详细的设计将会在后续的文章中讨论.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏服务器架构探讨

要描述一项技术或是一个行业,一般都会从其最古老的历史开始说起,我本也想按着这个套路走,无奈本人乃一八零后小辈,没有经历过那些苦涩的却令人羡慕的单机游戏开发,也没有响当当的拿的出手的优秀作品,所以也…

leetcode72 编辑距离

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入: word1 "horse", word2 "ros" 输出: 3 解释: ho…

即时通讯系统架构

有过几款IM系统开发经历,目前有一款还在线上跑着。准备简单地介绍一下大型商业应用的IM系统的架构。设计这种架构比较重要的一点是低耦合,把整个系统设计成多个相互分离的子系统。我把整个系统分成下面几个部分:(1)状态…

leetcode303 区域和检索

给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。 示例: 给定 nums [-2, 0, 3, -5, 2, -1],求和函数为 sumRange() sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0,…

算法(24)-股票买卖

股票买卖1.动态规划框架LeetCode-121 一次买卖LeetCode-122 不限次数LeetCode-309 不限次数冷冻期LeetCode-714 不限次数手续费LeetCode-123 两次买卖LeetCode-188 k次买卖2.贪心特解LeetCode-121 一次买卖LeetCode-122 不限次数解题思路参考buladong解题,详细信息可…

网络游戏的客户端同步问题 .

有关位置同步的方案实际上已经比较成熟,网上也有比较多的资料可供参考。在《带宽限制下的视觉实体属性传播》一文中,作者也简单提到了位置同步方案的构造过程,但涉及到细节的地方没有深入,这里专门针对这一主题做些回顾。 最直接的…

leetcode319 灯泡的开关

初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 …

网游服务器端设计思考:心跳设计

网络游戏服务器的主要作用是模拟整个游戏世界,客户端用过网络连接把一些信息数据发给服务器,在操作合法的情况下,更新服务器上该客户端对应的player实体、所在场景等,并把这些操作及其影响广播出去。让别的客户端能显示这些操作。…

算法(25)-括号

各种括号1.LeetCode-22 括号生成--各种括号排列组合2.LeetCode-20 有效括号(是否)--堆栈3.LeetCode-32 最长有效括号(长度)--dp4.LeetCode-301删除无效括号 --多种删除方式1.LeetCode-22 括号生成–各种括号排列组合 数字 n 代表生成括号的对数,请你设计一个函数&a…

(二十)深入浅出TCPIP之epoll的一些思考

Epoll基本介绍 在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于 select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd…

leetcode542 01矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 示例 2: 输入: 0 0 0 0 1 0 1 1 1 输出: 0 0 0 0 1 0 1 2 1 注意: 给定矩阵的元素个数不超过 10000。…

RPC、RMI与MOM与组播 通信原理 .

远程过程调用(RPC): 即对远程站点机上的过程进行调用。当站点机A上的一个进程调用另一个站点机上的过程时,A上的调用进程挂起,B上的被调用过程执行,并将结果返回给调用进程,使调用进程继续执行【…

网关服务器 .

之前想着要把什么什么给写一下,每次都太懒了,都是想起了才来写一下。今天只讨论游戏服务器的网关服务器。 1.转发 转发客户端和服务器间的消息,网关将场景、会话、数据、名字、平台等服务器的数据转发给客户端,接收客户端的数据&a…

算法(26)-最长系列

最长系列1.LeetCode-32 最长有效括号--子串2.LeetCode-300 最长上升子序列--长度3.LeetCode-32 最长回文子串--是什么5.LeetCode-512 最长回文子序列--长度6.LeetCode-1143 最长公共子序列--长度6.LeetCode-128 最长连续序列--长度7.LeetCode-14 最长公共前缀-字符串8.剑指offe…

一个简单的游戏服务器框架 .

最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。 第一部分 服务器逻辑 服务器这边简单的分为三…

游戏登陆流程 .

当公司有很多游戏的时候,那么公司往往会有一个统一的账号管理平台,就就像盛大通行证、网易通行证,战网平台,这些平台统一管理游戏的账号数据。 打个比方,现在我们玩星辰变,那么玩家登陆游戏的时候…

leetcode97 交错字符串

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。 示例 1: 输入: s1 "aabcc", s2 "dbbca", s3 "aadbbcbcac" 输出: true 示例 2: 输入: s1 "aabcc", s2 "dbbca", s3 "aadbbbaccc" 输…

算法(27)-最大系列

最大系列1.LeetCode-239 滑动窗口的最大值2.LeetCode-53 连续子数组的最大和3.LeetCode-152 乘积最大的子数组。4.剑指 Offer 14- I. 剪绳子为k个整数段,使各个段成绩最大1.dp数学推导1.LeetCode-239 滑动窗口的最大值 窗口由左往右最大值数组Left,和由…

mysql数据库表的导入导出

MySQL写入数据通常用insert语句,如 复制代码 代码如下: insert into person values(张三,20),(李四,21),(王五,70)…; 但有时为了更快速地插入大批量数据或…

leetcode 33 搜索旋转排序数组 到处是细节的好题

这个题想了想就会做,只是细节真的能卡死人,找了好久的bug。甚至我怀疑我现在的代码可能还有错,只是没例子测出来。 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1…