游戏开发效能工具之「联调平台」的探索之路阐述了联调平台整体的设计思路和方案原理细节,分析了从引擎侧到SDK侧整个链路的数

联调平台从上至下分为游戏侧和SDK侧两层,游戏侧是指游戏开发,通常是在PC环境进行,SDK侧是指移动SDK环境,需要在Android/iOS平台运行。首先游戏开发人员在游戏侧发起某个GSDK接口的调用,针对不同的游戏引擎(Unity/Unreal),我们提供了Unity与Unreal的插件支持,并在底层封装成统一的C++接口层,最终将分发至不同的终端平台,这个过程是由宏定义来控制是走原生平台还是联调平台,针对游戏侧接入,我们提供了Bridge和Common两种接入方式,两种方式对应的协议内容、实现方式、接入方式都各有不同,下文会详细介绍两种方式的原理细节。接口请求数据继续向下会分发到联调平台的EngineProxy层,EngineProxy层封装了联调平台在游戏侧的核心实现,包括数据协议处理、同步等待、NetTool(联调平台网络工具)封装、Callback处理等,处理后的数据包会通过NetTool分发到SDK侧,NetTool是整个通信的基石,通过长连接实现,支持局域网和公网两种方式,这样就完成了数据从PC端到移动端的流转。

移动端SDK需要在真实APP环境并且安装到手机上才能运行,因此联调平台还为游戏开发人员提供了管理平台,在管理平台可以完成对应SDK版本APP的构建,APP侧通过NetTool接收到接口请求数据,首先在NativeProxy层对消息进行解析,判断游戏侧接入类型,验证通过后构建真实的接口请求,获取请求的方法名和对应的参数,分发到GSDKBridge层通过反射来完成GSDK方法的调用,如果是同步方法,则在方法执行后将结果进行协议封装,通过NetTool发送到游戏侧,沿着相反的路径最终返回至最初EngineCalls调用的地方,至此完成了整体数据双向收发的流程。同时Proxy层还提供了可视化的界面,让游戏开发者可以实时便捷的查看每个接口的细节,以及对数据进行筛选、搜索、历史查看等操作,使得整个游戏开发体验非常的高效。

接下来会重点介绍各模块的方案实现细节与原理。

Unity/UnrealBridge方案是指在引擎侧接入了SDK提供的引擎Bridge插件,该Bridge插件和NativeBridge层约定好了通信协议和交互方式,协议载体是JSON,请求和JSON协议一一对应,由引擎侧组装好业务JSON数据包后,联调平台Proxy层会通过NetTool转发到手机SDK侧,NativeProxy侧处理后获取完整的业务数据包,进而通过SDKBridge层完成接口请求。

由于方法的调用本身需要通过网络,是异步的操作,因此对于部分有同步返回值的接口方法,Engine端在调用接口后,必须要同步等待,因此在Engine端需要Hold当前线程,来模拟出实际接口的使用情况。具体的调用时序图:

统一的C++Interface中已经定义好了通用的数据协议,但是针对联调平台,还需要额外增加网络层的若干字段,以下列出该方案不同类型的协议字段:

根据NetTool应用层的头部协议,如果是同步方法,会把方法执行后的结果进行返回协议封装,通过NetTool发送回引擎侧,引擎侧取到实际的值后释放等待的信号量,实现方法的返回,完成一次方法调用。针对Event和Callback类型,也添加了对应的消息类型,在双端根据msg_id维护对应的映射关系,实现事件的响应和回调处理。

Common方案是指在引擎侧没有接入Bridge插件的游戏,本方案基于一个大前提:Unity/Unreal引擎侧调用Native的方法都是通过C方法进行调用,因此要实现通用方案就转变成了如何实现动态对任意一个包含任意参数的C函数进行调用。

C函数导出的符号约定为前缀增加下划线,如

voidtestMethod();方法的符号为:

_testMethod该符号所对应的地址实际上会被包含在macho文件中,我们只需要找到对应的符号名称即可找到对应的符号地址。

动态链接器这里已经为我们提供了这样的能力:

externvoid*dlsym(void*__handle,constchar*__symbol)__DYLDDL_DRIVERKIT_UNAVAILABLE;通过dlsym我们可以通过符号找到对应的地址,比如这样:

void*functionPtr=dlsym(RTLD_DEFAULT,"testMethod");针对这样无参数无返回类型的函数,直接对函数指针发起调用即可:

void(*funcPointer)()=functionPtr;funcPointer();对任意参数进行调用那么找到函数所在地址后,对于有参数有返回值的函数,该如何动态传参呢?

通常来说函数调用要用到的两条基本的指令:CALL指令和RET指令。CALL指令将当前的指令指针(这个指针指向紧接在CALL指令后面的那条指令)压入堆栈,然后执行一条无条件转移指令转移到新的代码地址。RET是与CALL指令配合使用的指令,在绝大多数函数中它是最后一条指令。RET指令弹出返回地址(就是早些时候CALL指令压入堆栈的地址)并将其加载到EIP寄存器中,然后从这个地址开始继续执行。

我们都知道函数调用中参数的传递实际上是参数的压栈和出栈的过程,所以问题的本质在于针对需要传入参数的函数,我们如何对参数进行压栈,以及压栈后,我们该如何在函数调用时使用这些参数,并在使用完成返回时依次弹出这些参数。

由于在C语言层面,直接去操作压栈与出栈的参数十分困难,因此需要使用到汇编去帮助我们完成。

那么我们采用LibFFI库来帮助我们实现这个复杂的能力,大致分为这几步:

这种方案可以支持绝大部分的参数类型调用,但是针对输入参数是函数指针的情况,就无法做到了。

在个别游戏项目里,所有的回调方法都是通过C#中构造Action然后在调用C方法时,传入该Action的函数指针。由于联调平台所有数据都是通过网络层建立桥接完成调用的,因此在实际调用中,Native端根本不存在这个函数指针,也就是说,必须要动态构建出一个函数指针。

由于在打包macho时,所有的函数地址绑定的符号必须要打包在可执行文件中,因此想要能够动态生成一个函数是无法做到的。

那么还有其他方法可以动态完成函数的创建、调用时进行压栈操作、出栈操作吗?

其实我们可以事先定义好一个通用的函数实现,并通过汇编代码,在执行时,去手动的收集输入的参数以及返回值参数,于是我们也可以利用LibFFI特性来实现。

总结起来的流程就是:

通过这个方法还可以通过userData传入的方式,去标识和辨别每一个创建的C函数。

NetTool承载了联调平台所有网络(包含局域网与广域网)的收发能力,在联调方案中,无论针对同步和异步的场景都需要被动通知的能力,因此我们需要采用长连接方案,NetTool是整个联调平台的核心层,直接关乎接口调用的成功与否。

对于局域网场景,是不需要外界网络参与的,所以在手机APP侧需要具备Server端的能力,为PC游戏侧提供接口服务,采用本地Socket长连,由PC游戏侧完成Client端能力接入,局域网环境非常的稳定和高效,是NetTool首选的连接方式,在该场景中,PC和手机需要保持在相同局域网环境,手机APP会建立长连接的Server,监听对应的端口,PC侧作为Client根据Server端的IP地址和端口号建立长连接,根据既定协议进行数据传送。

以局域网场景为例,上图为NetTool整体的数据处理流程,主要包括如下步骤:

上面阐述了联调平台整体的设计思路和方案原理细节,分析了从引擎侧到SDK侧整个链路的数据流向和处理过程,游戏开发者借助该平台可以在PC侧高效完成移动SDK能力的接入,提高了数倍的接入效率和接入体验,让游戏工作室更专注游戏玩法的实现,目前该平台已在字节内部和外部二十几款游戏落地,全部是正向反馈,我们也会不断去优化和迭代联调平台的易用性和稳定性,不断扩展平台功能,该平台为效率而生,希望日后可以解决游戏开发过程中的所有效率问题,并为游戏开发者带来全新的开发体验。

THE END
1.原语科技北京原语科技成立于2021年,依托国内最大隐私计算社区,秉承开放透明即是安全,构建全球最大隐私计算开源平台。https://primihub.com/
2.(13701期)淘系电商实战宝典:万相台无界投放,杨测款打款防守,让三大推广工具合井升级 有商家新建跨投计划转化率提升25%,ROI提升近30%! 课程大纲(课程总课时数为:18节) 前言 1课时 万相台无界课程介绍 万相台无界-选款阶段 3课时 货品运营测款快计划 关键词推广智能选品计划 精准人群推广新品飞车计划 万相台无界-测款阶段3课时 http://www.hmly8.com/60357.html
3.重磅揭幕:2024第七届金猿&魔方论坛即将来袭,引领大数据产业新潮流通过对话式数据分析,企业获取市场信号的能力得到了显著提升,预测性分析工具使得前期市场捕捉成为可能,从而大幅提升了企业的决策效率。刘先生是某科技公司的数据分析师,他表示:“通过AI工具,我们能够实现从静态报表到动态分析的飞跃。以前的繁琐过程,现在几乎可以在几分钟之内完成,大大提高了我们的工作效率。”https://www.163.com/dy/article/JJHJRGMU0553TKEZ.html
4.美国签证指导博主每天都会收到很多关于美国签证办理、续签等美国签证问题的咨询。我们将这些有代表性的问题发布在这里,希望可以帮助到有类似疑惑的同学。如果以下问题没有解决你的疑惑,也可留言~1、OPT期间美国签证过期了,需… 阅读全文? 发表了文章2024-12-16 16:35 https://www.zhihu.com/people/visaus
5.著作权登记:易我数据修复软件V1.6最新公告客户:成都***开发有限责任公司委托我公司代理的著作权登记:易我数据修复软件V1 6登记号:2024SR1601337现已发证!http://zhenghuaip.com/index.php?a=show&catid=49&id=45978
6.淘系电商实战宝典:万相台无界投放,杨测款打款防守,让你店铺脱颖三大推广工具合井升级 有商家新建跨投计划转化率提升25%,ROI提升近30%! 课程大纲(课程总课时数为:18节) 前言 1课时 万相台无界课程介绍 万相台无界-选款阶段 3课时 货品运营测款快计划 关键词推广智能选品计划 精准人群推广新品飞车计划 万相台无界-测款阶段3课时 货品运营上新快计划 关键词推广竞争力测试计划https://www.15252.cn/?p=242320
7.独立杯口基础和独立基础施工组织设计方案根据本工程的特点和我公司的实力,我们将该工程施工总工期控制在招标文件要求的270天,即施工日期为2008年3月30日~2009年12月24日,进度计划安排均将以确保工程质量和竣工为目标,组织好劳动力,材料、机械设备、协调好各方关系,确保总工期目标的顺利实现。 http://shigongdaquan.max.book118.com/dir5199/doc-5580.html
8.湖里区弘爱妇产医院(2017G06地块)地下室与上部主体总承包工程招标凡有意参加投标者,请于*** * : * : *至*** * : * : *通过(略) 市建设工程电子招投标交易平台(网址:http:/ *** )(公共资源电子交易平台名称及网址)采取无记名方式免费(略) 文件等相关资料。 (略) 文件使用电子签名系统 (版本:V3.6.4及以上)(电子招标文件编制工具软件名称及版本号)打开。 (略)https://fj.bidcenter.com.cn/diqucontent-66479200-1.html
9.福州大学工业机器人虚拟仿真及综合应用实训系统等采购项目附件(3)联合体各方应共同与采购人签订政府采购合同,就政府采购合同约定的事项对采购人承担连带责任。 (4)项目如涉及资质要求,该部分工作内容应由联合体中符合该资质要求的供应商承担,联合体协议及签订的采购合同应符合这一要求;联合体中有同类资质的供应商按照联合体分工承担相同工作的,应当按照资质等级较低的供应商确定http://www.ccgp-fujian.gov.cn/upload/document/20221202/4317d13ef03041e2b2d19ae99e578972.html
10.项目管理工作计划20篇7、劳务分包合同必须要与材料款分开,即劳务分包只能包含人工费、中小型机械费、辅料费及小型手头使用工具费用,其余一概不能包含在劳务分包合中,同时注明人工工资数额。 8、合同价款须明确约定工程款和劳务费用的组成、支付时间、结算方式以及保证按期支付的相应措施。 https://www.unjs.com/fanwenwang/gzjh/20230309124058_6621225.html
11.金徽酒:首次公开发行股票招股意向书股票频道通过后方能提交股东大会审议,且公司应当提供网络形式的投票平台为股东参 加股东大会提供便利。公司应以股东权益保护为出发点,在有关利润分配政策 调整或变更的提案中详细论证和说明原因。股东大会在审议公司章程规定的利 润分配政策的调整或变更事项时,应当经出席股东大会的股东(包括股东代理 人)所持表决权的三分之二https://stock.stockstar.com/notice/JC2016022200000948_49.shtml
12.大信实务合同各方均有权单方面终止完全未执行的合同,且无需对合同其他方作出补偿的,该合同应当被视为不存在。其中,完全未执行的合同,是指企业尚未向客户转让任何合同中承诺的商品,也尚未收取且尚未有权收取已承诺商品的任何对价的合同。 【问题12】合同变更如何影响原合同及履约义务?https://www.daxincpa.com/periodical/Journal/2020/1201/1350.html
13.围挡施工安全方案6篇(全文)基槽边缘堆置土方或建筑材料或沿挖方边缘移动运输工具和机械,一般应距基坑上部边缘不少于2m,弃土堆置高度不应超过1.5m。 四、基槽开挖 根据所提供的原地面标高,施工时将根据测设的围墙基础标高进行修整。多余的土方及时运到建设单位指定位置进行堆放,同时如果在场地中发现土质不良时应进行处理,处理的方法视现场情况确定https://www.99xueshu.com/w/filepfsjjgmf.html
14.华为HMAAL00/HMA【下载地址】华为HMA-AL00HMA-TL00强制原方清除解锁帐号密码工具平台包本仓库提供了一个资源文件,名为“华为HMA-AL00 HMA-TL00强制原方清除解锁帐号密码工具平台包.zip”。该工具平台包专为华为HMA-AL00和HMA-TL00机型设计,能够帮助用户强制清除原方解锁帐号密码,适用于部分机型 https://blog.csdn.net/gitblog_09777/article/details/143149844
15.企业中高层时事解读课2021第7期(总期57期)在线培训课程中央预算内投资对赣南等原中央苏区参照执行西部地区政策,对沂蒙革命老区参照执行中部地区政策,研究安排专项资金支持革命老区产业转型升级平台建设。支持符合条件的革命老区海关特殊监管区域按规定开展增值税一般纳税人资格试点,对其他地区向革命老区重点城市转移的企业,按原所在地区已取得的海关信用等级实施监督。鼓励政策性金融https://www.zzqyj.net/?list_89/1283.html
16.营销培训心得范文然而幸运的是,公司很快为我们搭建了这样一个很好的学习平台,非常感谢公司给我一个良好的学习机会,学习在市场份额低的产品策略:市场份额低的产品使用销售促进工具往往更有利可图,这期间可使用“通路奖励”营销是在一种利益之上下,通过相互交换和承诺,建立、维持、巩固与消费者及其他参与者的关系,实现各方https://www.cnfla.com/xindetihui/3370807.html
17.news.futunn.com/translate/1682504700957/7691335/0在中国,提供在线交易平台服务属于增值电信服务的范畴,受中国法律法规的外商投资限制和许可证要求的约束。如果我们的任何子公司未来自行产生债务,管理这类债务的工具可能会限制其向涂鸦智能支付股息的能力。此外●我们使用第三方供应商涉及某些风险,这些风险可能导致成本增加、供应中断或原材料短缺、质量或合规问题https://news.futunn.com/translate/1682504700957/7691335/0
18.文明科室推荐材料为了充分发挥农科院网站的农业技术传播作用,网站开辟了农业技术咨询答疑板块;在院领导的指示和中心领导的带领下,以原阳、扶沟、鄢陵三县为试点,初步完成了省农村科技远程双向视频诊断互动平台建设。目前平台已经启用,我院植保专家与鄢陵县花农的互动现场,已在河南卫视11月16日新闻节目中播出。https://www.hnagri.org.cn/article-40234.html
19.一文看懂我国推进“无废城市”建设的进展问题及对策建议创新固废投融资体系建设。推进危险废物、危险化学品处置等高风险行业环境污染强制责任保险;探索利用绿色金融工具,结合数字化、智能化固废全过程追踪溯源与监管体系,建立支持“无废城市”建设的专业服务平台,构建城市、城市群固废全价值链管理的整体解决方案。 https://www.chinacace.org/news/fieldsview?id=13807
20.蔚然成风陈版主答疑2022.12.10审计工具控(七)被投资方权益发生了外部交易并有客观证据,包括发行新股等被投资方发生的交易和第三方之间转让被投资方权益工具的交易等。 第四十五条规定: 权益工具投资或合同存在报价的,企业不应当将成本作为对其公允价值的最佳估计。” 因此,新金融工具准则下对“三无”权益工具投资采用成本进行后续计量的条件远比原准则下严格。https://www.shangyexinzhi.com/article/5757593.html
21.实务部分笔记(计学撮要2018)书评除了非同一控制的企业合并、金融工具和租赁这三个问题外,不会特别难。不过也可能也是因为这三块自己接触的少的原因。实务中解决的问题,其实都挺落地的,收入确认准则可能很难,但实务并不会很难,如果拿不准提前和技术部沟通好就可以了。第一章 资产、负债类业务问答第一节 固定资产的相关问题1-1-1 为客户定制的https://book.douban.com/review/9978721/
22.2023工程项目部经理年终工作总结一、以队伍建设为重点,加强了分包方的管理 年初公司制定了力保在今年的合法登记、注册且有能力的协作队伍数量要达到30支以上的目标,项目管理部在劳务队伍注册登记过程中,通过集团公司、公司项目管理工作平台,根据公司的工程特点采用约谈及考察等方式备选一批优秀劳务及专业分包队伍,优化队伍结构,选取队伍并严格审核队伍的https://www.yjbys.com/gongzuozongjie/nianzhong/3775158.html