游戏开发通用框架:ituuz-x v2.2 网络模块
ituuz-x是一个cocos creator游戏开发一个集成框架,也是一个工具集。其包括常用用的项目管理的mvc架构,以及静态数据、本地化、资源管理、网络等模块,后续还会不断拓展新的模块或工具。主页地址,欢迎关注,如果感觉有所帮助,欢迎关注我的公众号,或者帮我点下网站的广告,公众号二维码在文章最下方。
v2.2版本主要是对网络核心模块进行了封装,完善了框架体系。这个版本中目前只对http进行了实现,其他类型都是未实现的接口。
v2.2版本功能列表
- [
new
]网络核心模块net
- [
new
]GameModel增加网络通信相关接口 - [
plug-in
]增加creator插件pb-generator - [
bug
]修改Mediator销毁接口destroy有时不会调用的bug - [
bug
]修改场景切换时,部分数据没有销毁的bug
主要功能详细介绍
网络核心模块介绍
框架中的网络模块意在于让网络的层的具体实现脱离与业务层,在业务层的开发人员无需关心是http、websocket还是其他连接方式,也不需要关心网络层的数据格式,协议解析及映射关系等,甚至于使用起来都不知道在做网络操作,最终表现就是发送一个对象或者接收到一个对象来使用。框架目前支持Websocket、http、local以及自定义连接实现。没错,本地存储local这里也作为网络层来封装,就像上面说的一样,框架可以让开发人员脱离数据层具体实现来进行开发。
网络核心模块架构图
节点介绍
- 最下面的数据层:是指各种网络连接的功能实现,这里定义了Websocket、http、local三种常用的数据交互方式,当然框架也提供了接口来注册自定义的网络数据实现类。这层主要实现的功能接口主要是创建连接和发送数据,稍后会介绍Http的实现类HttpClient,先看基类的接口定义如下:
- 中间的数据支持层:数据支持层主要是工具类接口,网络核心层数据格式主要为protobuf,所以主要提供protobuf相关接口支持。同时MessageBase也是这层的一个重要基类。在网络核心层进行数据交互的对象都是继承MessageBase的Message对象,我们发送数据时就是new一个或者create一个Message对象然后发送出去,接收数据也是会接收到一个Message对象,然后直接读取该对象的属性。下面看一下MessageBase的几个主要接口:
- 最上层是业务层:业务层中我们处理数据主要放在MVC的Model层来处理,所以对数据的操作的接口封装在GameModel中,重要的几个接口如下:
- 其他节点:日志记录和状态切换控制,后续会增加日志记录接口和网络状态控制接口。网络状态控制主要是控制切换网络地址,以及切换网络类型,比如长短连接之间的切换,待实现。
使用方式
- 定义proto文件:proto协议语法遵循标准的的protobuf语法,除语法外,需要指定亮点格式声明,只有遵循这两点格式才能使用后面提供的代码生成工具,下面我们声明一个简单的proto文件:
- 使用插件生成json文件和ts代码:pb-generator插件(参考下面的
协议生成工具介绍
)可以根据proto生成对应的json配置文件和ts代码文件,proto里定义的每个message都会对应生成一个类,在使用时直接new这个类然后send发送出去就可以了,接收到的也是一个对象,直接读取使用这个对象的属性就可以了。例如上面的登陆协议在代码里就像下面这样处理:
- 初始化网络管理器及创建连接
- 缓存pb协议
- 发送和接收网络消息
- 在MVC中使用网络模块:在ituuz-x框架中核心的mvc模块中集成了数据模块Model,数据的交互都在Model中进行,所以消息的收发都集成在了Model中,主要接口如下:
协议生成工具(pb-generator)介绍
该工具是由nodejs实现,根据上面我们声明的pb文件,自动生成pb目标文件,和根据代码模版生成的ts代码,也就是对应的Message对象,可以在业务中直接使用。
工具配置,插件在plug-in目录下,在插件目录下的config.js文件就是插件的配置文件,使用时直接将插件目录copy到项目的插件目录下,然后修改config.js中的配置,最后重启creator就可以看见拓展选项中的插件了,点击生成就可以生成代码了。
自定义网络类型
上面讲到初始化网络时有个类型是自定义类型,这里讲以下如何使用自定义网络类型。
在框架中提供的协议解析方式不能满足需求时可以自己实现拓展
- 继承NetClientBase并实现必要的几个接口:
- 自定义NetClientBase例子
最后有任何问题都可以给我留言,通过关注我的公众号留言或者网站留言都可以。如果有所帮助记得帮我点下网站的广告 本篇文章地址:http://ituuz.com/2019/11/14/ituuz-x-net/
项目主页地址:http://ituuz.com/projects/
Github:https://github.com/yue19870813/ituuz-x