游戏同步器 源码-多线程 (6) 同步器

在使用 xxl 作业的过程中

实现多线程数据同步,可以按照以下步骤进行: 1.定义任务:首先需要定义一个继承自com.xxl.job.core.handler.IJobHandler的任务类,负责数据同步逻辑的具体实现。2、配置任务参数:在任务类中,可以通过注解@XxlJob为任务设置一些参数,如任务名称、任务描述、执行器等。 3.实现数据同步逻辑:在任务类中,通过重绘执行方法实现特定的数据同步逻辑。您可以根据需要使用多线程方法执行数据同步操作。4. 配置调度中心:在 xxl-job-admin 管理后台,配置调度中心,包括任务执行程序和调度策略。确保可以计划执行任务。5. 提交任务:通过调用 XxlJobExecutor.execute 方法提交任务。在此模式下,任务将提交到调度中心进行计划执行。6. 监控任务执行情况:您可以在 xxl-job-admin 管理后台查看任务执行情况和日志信息。可根据需要进行监控和调整。需要注意的是,xxl-job是一个分布式任务调度平台游戏同步器 源码游戏同步器 源码,它提供了可视化的管理界面和丰富的功能,可以轻松实现多线程数据同步等任务调度操作。以上是一个简单的过程,实际使用时需要根据具体需求进行配置和调整。

游戏同步器 源码-多线程 (6) 同步器

和移动游戏服务器常用的框架有哪些?

类型1:弱交互服务器端卡片跑酷,如卡片和跑酷

由于交互较弱,玩家和玩家不需要实时面对PK,互相打对方的线下数据,估算排名榜,买卖道具,所以实现时往往使用简单的HTTP服务器:

登录时可以使用非对称加密(RSA,DH),服务器根据客户的UID,当前时间戳和服务器的公钥估计散列加密密钥,并将其呈现给客户。将来,双方将与HTTP通信,并使用该密钥进行RC4加密。客户端收到密钥和时间戳后,会保存在内存中以备将来通信,服务端不需要保存密钥,因为每次都可以根据客户端传输的 uid 和时间戳以及服务端自己的公钥来估算。模仿TLS的行为用于确保多个HTTP请求之间的客户身份,并通过时间戳确保同一个人两次具有不同的登录密钥。

每回合开始时,访问它,恳求关卡数据,玩完后再次提交,检查是否合法,你得到什么奖励,数据库可以是单个MySQL或MongoDB,前端Redis缓存(可选)。如果要实现通知,让客户时间15秒共同编程服务器,如果有消息就拿出来,如果没有消息,可以逐步延长寻址时间,比如30秒;如果有消息,将同行时间缩短到10秒、5秒,虽然两个人聊天,但延迟可以适应。

这种

服务器实现三国策略还是卡牌酷跑游戏绰绰有余,这类游戏因为逻辑简单,玩家之间的互动性不强,采用HTTP开发,开发速度快,调试只需要一个浏览器就能调试逻辑清晰。

类型2:第一代游戏服务器1978

1978年,西班牙著名金融高中埃塞克斯大学的中学生罗伊·特鲁布肖(Roy Trubshaw)编制了世界上第一个MUD程序“MUD1”,该计划在埃塞克斯大学于1980年加入阿帕网后,增加了许多外部参与者,甚至美国玩家。MUD1程序的源代码被阿帕网共享,并出现了许多改编,直到那时,MUD才开始在世界各地流行。MUD1的不断建立形成了开源的MudOS(1991),成为许多网络游戏的鼻祖:

穆多斯

用C语言开发,由于玩家之间的强交互(聊天、交易、PK),MUDOS使用单线程非阻塞套接字为所有玩家服务,所有玩家的请求都发送到同一个线程进行处理,主线程每秒更新所有对象(网络收发、更新对象状态机、处理超时、刷新地图、 刷新NPC)。游戏

世界以卧室的方式组织,每个卧室有四个方向的西北和东南可以连接到隔壁房间,因为欧美最早的网络游戏都是地下城迷宫,所以场景的基本单位被称为“房间”。MUDOS 使用一种称为 LPC 的脚本语言来描述整个世界(包括卧室拓扑、配置、NPC 和各种情节)。游戏中的中级玩家(巫师)可以不断更改脚本,为游戏添加卧室并减少故事。早年,MUD1推出时只有17间卧室,毕业后Roy Trubshaw将其交给了哥哥Richard Battle,在Richard Battle的手中,他不断为100多间卧室添加各种玩法,最终让MUD推广中信。

用户使用

游戏同步器 源码-多线程 (6) 同步器

客户端如Telnet,用TCP合约连接到MUDOS,使用纯文本玩游戏,每条指令用回车符除以。比如1995年,国外第一款MUD游戏《夏科兴》,你输入:“goeast”,游戏也会提示你:“后家园——这里是贵云庄的后家园,花草万草,还有几个庄鼎在浇水。这就是猪笼草的生长地。这里唯一的出口是北方。这里:华志阿木(阿木)和两个庄鼎(náo Ding)“,之后你继续使用文本操作查看阿木的信息:”lookamu“,系统提示:”华志阿木(阿木)他是陆成峰的弟子,奉命看守这里的猪笼草。他看起来三十多岁,天生眉毛清白,正直大方,长相才华横溢。他的武术看起来[不是很高],尽管他的射击[非常轻]。然后你可以选择打败他以获得猪笼草,如果你吃了猪笼草,你可能会死于中毒。在网络资源稀缺的早期,这类游戏的替代感很强。

用户数据保存在文件中,并且

当每个用户登录时,所有用户的数据都从文本文件中加载,并且操作全部在显存上进行,而无需立即闪回C盘。如果用户退出,或每 5 分钟检测到数据更改,则将保存 C 驱动器。这样的系统在当时并不是一个大问题,因为每个服务器同时容纳4,000人玩。自 1991 年 MUDOS 发布以来,随着 Windows 图形的改进,新版本已在全球范围内改进、扩展并从新版本中撤出。1997年的游戏UO在MUDOS的基础上降低了角色的x,y坐标,降低了每个卧室的地图,但降低了每个角色的动画,从而产生了第一代图形网络游戏。

自游戏内容

基本上可以通过LPC脚本进行定制,MUDOS也成为了名称中第一个服务器端引擎,引擎开发一次就生产出来,没有沉重的游戏内容。后来的国外游戏如《万王之王》,很多都是像《UO》一样直接在MUDOS上开发的,增加了卧室地图和角色坐标等元素,框架依然为第一代国外MMORPG提供了坚实的支持,直到2003年,才有基于MUDOS开发的游戏。其实前面图形还原很多东西,而这款MMORPG前端的本质还是MUDOS。随着游戏内容变得越来越复杂,架构越来越不堪重负,各种负载问题逐渐浮出水面,于是有了第二代游戏服务器。

类型3:第二代游戏服务器2003

2000年以后,网络游戏早已脱离了原文MUD,进入了综合图形时代。虽然有很多小文件一开始无法承受,但用户上下线c游戏服务器源码,频繁读写用户数据,导致负载增加。随着在线人数的减少和游戏数据的减少,服务器似乎不堪重负。同时,初始EXTc磁盘分区相对脆弱,并且略有断水,容易发生大规模数据丢失。因此,第一步是剥离文件并将其存储在数据库中。

此时,游戏服务器

早已脱离了旧的MUDOS系统,各家公司都开始参考MUDOS结构,用C语言重新开发自己的游戏服务器端。脚本也放弃了LPC,取而代之的是更具可扩展性的Python或Lua。由于主逻辑采用单线程模型,随着游戏内容的减少,传统的单服务器结构进一步成为两难境地。于是有人开始拆分游戏世界,改成低级机型:

比赛的压力

服务器在拆分后松了一口气,两台游戏服务器同时访问数据库,大量重复访问,大量数据交换,使得数据库陷入下一个困境。这将创建一个数据库后端代理 (DBProxy),其中游戏服务器访问代理而不是直接访问数据库,然后代理访问数据库,同时提供内存级缓存。早年MySQL4不提供存储过程,这种后端代理通常运行在与MySQL相同的平台上,它转换了游戏服务器发送的中间数据操作指令,拆分为特定的数据库操作,并在一定程度上取代了存储进程。

不过这种结构并没有持续多久,因为玩家在切换场景时经常要切换连接,中间状态很容易混淆。而且游戏服务器越多后,彼此之间的数据交互会更加麻烦,于是人们拆分网络功能,独立创建一个网段服务Gate(有些地方叫Session,有些地方叫LinkSvr之类的,名字不同):

游戏同步器 源码-多线程 (6) 同步器

网络功能单独提取,允许用户连接到网段服务器,然后网段服务器将数据转发到前端游戏服务器。游戏服务器之间的数据交换也连接到网络管理进行交换。这类服务器基本可以稳定地为玩家提供游戏服务,一个网段服务1-2000人,之前的游戏服务器每个服务5k-1w,根据游戏的类型和复杂程度,图上隐藏了很多不重要的服务器,比如登录和管理。这是目前使用最广泛的模型,明天将用这种结构建造许多新项目。

根据以前的经验,人们有惯性,虽然你分裂的 mudos 越多越好。所以你继续想,网段可以拆分,聊天交易等基本服务可以拆分,也可以提供web套接字,数据库可以拆分,所以有以下模型:

这样的模型易于使用吗?确实有一些成功的游戏使用类似的架构,但利用了它的性能,例如一些小型 MMORPG。并且有两个挑战:每降低服务器级别,状态机的复杂性就可能翻倍,导致开发和错误发现成本更高;而且,对开发团队的挑战比较大,一旦项目时间紧张,开发人员缺乏经验,很容易挂断电话。比如,我

看到北京一家一线游戏公司的RPG即将像这样构建,我看了他们团队成员的经验,询问了他们的发布日期,并说服他们使用上面稍微简单的模型。人们非常有信心有成功的项目以这种方式完成,他们也必须这样做,他们真的想实现一个。于是他们毫不犹豫地开始编码,项目完成了一年多,之后就再也没有了。

现在在游戏成功率低的情况下,在更复杂的架构开始时需要考虑投资回报,比如你的游戏发布半年内PCU会有多少?如果一个APRG游戏不能达到每台服务器5万人,那么选择与实际情况更密切相关的结构会更经济。虽然你面前的项目真的是突破5万人朝着1000人的目标奔跑,但相信你的项目当时已经赚了很多钱,你数钱加班点逐步迭代,一次又一次的解开,相信你的心里也是幸福的。

其中的类型基本上是从从MUDOS衍生出来的开始,MUDOS中的各种组件逐渐从单机拆解成分布式的。事实上,昨晚很多新项目都采用了与前一个类似的结构,或者做了其他热组件的衍生。由于它们本质上是 MUDOS 的分解,因此它们被归类为第二代游戏服务器。

类型 4:第三代游戏服务器

2007年从《魔兽世界》开始,无缝对接的世界地图早已深入人心,相比往年,游戏玩家需要切换场景要走几步,每次切换等待加载几十秒,都是极具破坏性的游戏体验。因此,对于2005年之后的小型MMORPG,无缝地图已成为标准。与往年相比,在基于地图的剪辑游戏方面,没有一张地图上的人只能由一台服务器处理:

每个节点服务器管理一个映射区域,NodeMaster (NM) 为他们提供整体管理。更高层次的世界提供台湾层次的管理服务。省略了这几个服务器的细节,比如传统的数据库后端、登录服务器、日志记录和监控等,都总结在ADMIN中。在这个结构中,玩家通过一个简单的过程从一个区域移动到另一个区域:

玩家 1 完全由节点控制A 和玩家

3 完全由节点 B 控制,另一方面,玩家 2 由 A 和 B 提供服务。在从A到B的连接过程中,玩家2会同时恳求A正确的情况,B恳求正确的情况。而此时,玩家2依然属于A管理层。直到玩家 2 完全远离 AB 边界,它才完全交给 B。按照这个逻辑,世界地图被划分为多个区域,由不同的节点进行管理。对于一个节点的区域,不需要

地理上连接,比如台湾的四个外围部分和高山部分人少,可以统一到一个节点来管理,这个区块没有地理链接。节点管理哪些区块,可以根据游戏实时运行的负载情况和定期维护的时间,在NodeMaster中修改配置。所以第一个问题是很多 Node 服务器需要和玩家沟通,你需要问管理服务器玩家在哪个门上具体 UID 多少,原来服务器被场景切掉这个问题不大,问过一次就可以缓存了,现在服务器的类型就低了很多, 玩家会四处飘荡,通过UID找玩家比较麻烦;另一方面,GATE 需要根据坐标动态估计要与哪个节点通信,导致逻辑越来越粗,因此必须从负责连接管理的 GATE 中剪掉“用户对象”,因此有以下模型:

网段服务器返回简化的网络转发功能,用户逻辑由根据UID定义的OBJ服务器承担,GATE根据

在网络访问期间加载,并且OBJ根据资源数量(UID)进行分配,以便直接与用户通信,根据UID估计OBJ服务器发送数据的数量。新独立的OBJ提供更多高水平的服务:

GATE专注于网络。这种模型广泛用于无缝场景服务器。而且随着时间的推移,负载问题也越来越突出,做一个活动,远不那么活跃的区域显得非常活跃,依靠每周维护来调整还是比较笨重的,所以才有了动态的负载均衡。动态负载均衡有两种方式,第一种是 NodeMaster 根据负载动态动态连接更改每个节点的边界,不同的玩家对象按照之前的方法从一个节点迁移到另一个节点:

图 11:动态负载平衡

NodeMaster 定期在地图上查找热点,估算新的场景切割方法,然后告诉其他服务器开始调整,具体处理方法还是和之前的对象一样跨越边界进行通信。而且这些方法的实现相对复杂,所以人们设计了一种更简单直接的新方式:

图 12:基于网格的动态负载平衡

在网格的动态负载均衡中,地图按照标准规范均匀地切割成静态网格,每个条带负责一个特定的节点,并根据负载情况,可以实时迁移到其他节点。迁移分为三个阶段:打算、切换和完成。这三个状态由 NodeMaster 维护。规划阶段的新节点开始同步旧节点中网格的数据,完成后告诉NM;NM 确认确定后,还会通知新旧节点完成切换。切换后,如果 Obj 服务器仍在与旧节点通信,则旧节点将对其进行更正,更正后的 OBJ 将更正其状态并与新节点通信。

许多无缝动态负载均衡服务器声称支持无限数量,但这并不意味着MMORPG游戏中的最大人数可以无限扩展,因为这样的系统会受到网络带宽和客户端性能的限制。带宽决定了同一区域的最大广播限制,客户端的性能决定了同一屏幕上可以描绘多少角色。

从引入无缝映射的分布式对象模型开始,它已经完全脱离了MUDOS系统,成为一种新的服务器端模型。而且由于引入了动态负载均衡,对无缝服务器赋能,容纳数倍以上一代游戏服务器的上限,提供更好的游戏体验,我们称之为第三代游戏服务器架构。网络游戏从小型多人角色开始,RPG网络游戏一度长期占据90%以上,导致基于MMORPG的服务器架构蓬勃发展,但随着RPG玩家的疲惫,各种非MMORPG游戏像雪生菜一样出现在人们眼前,受到市场的欢迎。

类型 5:Battle.net 游戏服务器

经典的 Battle.net 服务器和RPG游戏有两个区别:RPG分为分区,上海用户和上海用户互不交流。 Battle.net,虽然每场比赛通常少于8名玩家,但省内只有一套服务器,所有玩家都可以一起玩, 而玩家和玩家使用P2P联手组成游戏:

游戏同步器 源码-多线程 (6) 同步器

玩家使用匹配服务器创建、加入、自动匹配、邀请等来形成游戏。服务器将选择一个人作为主机,其他人将P2P连接到主机播放器。STUN是一款帮助玩家构建P2P的牵引服务器,由于P2P电信只有75%左右c游戏服务器源码,真正没有连接的玩家会通过Forward转发。

大量互联对战,体育竞技游戏采用类似的结构。P2P有一个网格模型(所有玩家相互连接)和一个星模型(所有玩家都连接到一个主玩家)。复杂的游戏状态在网状模型下无法保持一致,因此明星P2P模型经受住了历史的考验。除了游戏数据,语音启用 Battle.net 系统还会将大家的语音数据发送到负责的玩家机器,并通过混、缩、重编码、编码的方式返回给所有用户。

Battle.net 游戏,基于竞技、体育、动作等类型游戏,节奏较慢的RPG(包括ARPG)有着根本的区别,激烈的游戏过程必然会带来比RPG更复杂的同步策略,这样的同步机制往往带来的很多游戏结果都是客户直接估算出来的,那么在到处都是裂缝的明天, 如何保证比赛结果的公平性?

主要方法是投票方法,其中所有客户端都是独立估计的,然后传递给服务器。如果结果相同,则更新记录,如果结果不一致,则以类似于投票的形式确定最终结果。同时,记录所有输入到游戏中的内容,如果可能的话,找到另一个空闲游戏客户端,检查整个游戏是否是结果。此外,记录经常有用户涉嫌作弊,供运营商在禁止时参考。

类型 6:休闲游戏服务器

休闲游戏类似于 Battle.net 服务器,都是区域范围的架构,不同的是有卧室服务器,还有特定的游戏服务器,游戏的主体不再是在玩家P2P中进行的,而是连接到专用的游戏服务器进行处理:

使用与 Battle.net 相同的区域范围架构,用户数据不能像分区RPG那样一次性加载到视频内存中,然后直接在视频内存上更改。在整个区域结构下,为了应对一个用户同时玩多个游戏,用户数据需要区分基础数据和不同的游戏数据,游戏数据需要区分点数据和文档数据。胜、平等点可以直接提交增量变更,而更一般的文档数据需要提供读写令牌,只有一个写入令牌和多个读令牌。同时在两台笔记本电脑上玩同一游戏时,第一个启动的游戏会获得写入令牌,并且可以操作任意用户数据。然后启动的那种游戏不仅可以提交胜、平、输的增量变化,还可以使用只读形式的用户数据来保证游戏可以运行,并会提示用户游戏数据已锁定。

类型7:现代动作网络游戏

从日本动作游戏的早期开始,传统的 Battle.net 动作游戏和RPG游戏开始尝试融合。简单动作游戏玩家容易疲惫,留存率不如RPG高;简单RPG战斗却节奏缓慢的平庸,在激烈的对峙中难以满足很多玩家的期待,于是两人开始融合成新一代:动作+小镇模式。玩家聚集在城镇,然后以地牢的形式出去,以动作游戏的形式完成各种RPG任务。本质是一套RPG服务器+复制服务器。因为每个任务可以在8名玩家以内控制角色,所以可以获得更实时的游戏体验,让玩家玩起来越来越过瘾。

说了这么多关于游戏服务器的类型,虽然几乎相同,但您堆积的其他类型就是这样。

如果你对Dubbo/Netty等源代码和原理感兴趣,欢迎加入我的知识星球。长按下方二维码

目前,知识星球上的“Dubbo源代码分析”目录已经更新如下:

01. 调试环境建设

02. 项目结构列表

03. 配置配置

04. 核心流程概述

05. 扩展机制 SPI

06. 线程池

07. 服务曝光导出

08. 服务参考

09. 注册表

中心

10. 动态编译

11. 动态代理代理

12. 服务调用

13. 呼叫功能

14. 过滤器过滤器

15. 蔚来服务器

16. P2P服务器

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 游戏同步器 源码-多线程 (6) 同步器 https://www.wkzy.net/game/134824.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务