无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你可以很容易的搭建出一个集群无中心节点、集群自动化、分布式的网络服务器;FXGL、Unity、UE、Cocos Creator、Godot、Netty、Protobuf、webSocket、tcp、socket;java Netty 游戏服务器框架;
GNU Affero General Public License v3.0
834
stars
183
forks
source link
SDK TypeScript 客户端代码生成;方便 CocosCeator、或其他支持 TypeScript 的客户端对接。 #329
Open
iohao opened 2 months ago
在线文档:SDK TypeScript 代码生成 (yuque.com)
新增功能的使用场景
204 配合 SDK TypeScript 生成可使用的联调代码,减少客户端模板代码的编写
该特性所生成的代码,是基于 SDK TypeScript 上使用的,也就是 ioGameSDK TypeScript。
SDK 代码生成主要解决以下几个问题
SDK TypeScript 代码生成可为客户端开发者减少巨大的工作量,并可为客户端开发者屏蔽路由等概念。直接面向接口编程,面向接口编程的几个优点
传统的对接方式,在客户端发送请求后并不能知道该请求会返回什么,这通常需要在协议文件中阅读与查找。如果协议较少时,这样做的问题并不大,但如果有数百个协议时,这样的工作方式是低效的,因为协议文件中存在着大量的干扰因素。
如果你的协议与路由是强绑定的,那么问题则会更大。因为这失去了协议复用的可能性,这将会产生大量的协议碎片。
以上几个问题,在 ioGame 中得到了很好的解决;为了直观,下面我们首先做客户端功能上的展示,其次介绍客户端如何使用生成的代码的。
服务器示例代码
后续介绍将使用以下服务器代码讲解。
onClickInt 演示
我们的客户端界面如下,提供了 int、long、bool、string 及其相关数组的协议,这些协议是 ioGame SDK 提供的,用于处理协议碎片相关的。其中,student 是我们自定义的一个协议。后续的介绍中,通过用 int、intList、student、studentList 进行举例介绍。
当我们点击 int 按钮后,会将一个 int 的值传递给服务器,并得到服务器响应的数据。
onClick Int 对应的代码如下
从下图中我可以看到同一个 api 有两种编码风格。SDK 代码生成时,会帮助我们生成两种编码风格 api,一种回调风格的,另一种是 await async 风格的;开发者可根据自身业务的复杂度来选择其中的一种编码风格与服务器进行交互。
编码风格 1,异步回调
我们先介绍回调风格的 api,细心的朋友会发现,在工具的右边显示了该方法的相关文档,文档包括:
编码风格 2,async await
async await 风格的 api,也就是编码风格 2。在最终结果的获取上,与回调风格是一样的,并无任何区别。async await 在处理复杂业务时,可以有效的避免回调地狱。
同样,api 的文档中有相关描述及使用示例,这里就不同义反复了。
客户端控制台介绍
请求时,在控制台中会打印几个标签,分别是:
响应时,在控制台中会打印几个标签,分别是:
onClickInt 小结
本次我们主要展示了传递 “基础类型” 的单个参数给服务器。下面,我们将介绍传递 “基础类型” 的 List 参数给服务器。
onClick ListInt 演示
当我们点击 intList 按钮后,会将一个 int list 的值传递给服务器,并得到服务器响应的数据。
编码风格
onClick ListInt 对应的代码如下,从图中我可以看到同一个 api 有两种编码风格。与上面介绍的类似,这里就不重复了。开发者可根据自身业务的复杂度来选择其中的一种编码风格与服务器进行交互。
编码风格 1 - 回调及文档
编码风格 2 - async await 及文档
客户端控制台介绍
同上。
onClick ListInt 小结
本次我们主要展示了传递 “基础类型” 的 List 参数给服务器,并接收服务器返回的 int list 数据。这意味着,客户端与服务器都具备接收与返回 “基础类型” List 数据的能力。
目前我们只演示了 int、intList,关于其他 “基础类型” 相关的,如 long、bool、string ...等,这里就不一一介绍了。该特性称为协议碎片,协议碎片可让我们大量的减少协议的定义,这利益于协议可复用的设计。
下面,我们将介绍自定义协议的单个参数的处理和多个参数的处理。在传统框架中,基本只能支持单个参数的处理。
onClick Student 自定义协议 演示
自定义协议 Student
当我们点击 student 按钮后,会将一个 Student 对象传递给服务器,并得到服务器响应的数据。
编码风格
onClick Student 对应的代码如下,从图中我可以看到同一个 api 有两种编码风格。与上面介绍的类似,这里就不重复了。开发者可根据自身业务的复杂度来选择其中的一种编码风格与服务器进行交互。
编码风格 1 - 回调及文档
编码风格 2 - async await 及文档
客户端控制台介绍
打印 Student 协议对象的信息,其他同上。
onClick Student 小结
本次我们主要展示了传递自定义协议的单个参数给服务器,并接收服务器返回的 Student 数据。这是最普遍的使用方法,而传统框架基本也只能处理单参数的概念。
下面,我们将介绍将自定义协议 List 传递给服务器的使用方式。这意味着,客户端与服务器都具备接收与返回 “自定义协议” List 数据的能力。
onClick ListStudent 自定义协议 演示
当我们点击 student 按钮后,会将一个 Student 对象列表(即 List、数组)传递给服务器,并得到服务器响应的数据。
编码风格
onClick ListStudent 对应的代码如下,从图中我可以看到同一个 api 有两种编码风格。与上面介绍的类似,这里就不重复了。开发者可根据自身业务的复杂度来选择其中的一种编码风格与服务器进行交互。
编码风格 1 - 回调及文档
编码风格 2 - async await 及文档
客户端控制台介绍
打印 Student 协议对象 List 的信息,其他同上。
onClick ListStudent 小结
本次我们主要展示了传递自定义协议的 List 参数给服务器,并接收服务器返回的 Student List 数据。这也是协议复用的优势,同一个协议即可用在单参数的传递中,也可用在 List 参数的传递中,这一概念在传统框架中是无法做到的。
SDK 所生成的代码
以下客户端 xxxAction 的代码是由系统自动生成的,客户端开发者只需调用方法就能与服务器通信了。为了节约篇幅,删除了方法的注释与实现,只保留了方法名。
小结
SDK TypeScript 代码生成可为客户端开发者减少巨大的工作量,并可为客户端开发者屏蔽路由等概念。直接面向接口编程,面向接口编程的几个优点
上面只展示了 action 相关的,除了能生成 action 的代码外,还能生成广播及错误码相关的代码,这部分的文档将在功能正式推出后补全。
其他参考资料
204