• 售前

  • 售后

热门帖子
入门百科

CocosCreator入门教程之网络通信

[复制链接]
天寿保健护理彰 显示全部楼层 发表于 2021-10-26 13:03:51 |阅读模式 打印 上一主题 下一主题
网络通讯概况

开辟一个网络游戏,难免要处置惩罚网络通讯。有几点标题需要注意:
1.服务端为了快速开辟可能前期使用http通讯,后面再改成websocket/socket。
2.同时存在http和websocket/socket通讯
3.通讯数据格式可能需要随时更换为json或protocol buffer,可能需要添加额外头部。
4.在新手引导里使用本地数据做模仿,请求不需要发送给后端。
5.重连后数据简单同步
详细实验

针对第一、二个标题,我在计划通讯模块时会考虑将通讯只管抽象为统一的对外接口,在游戏启动时通过不同的驱动器创建实例(假如只使用一种通讯方式,使用单一实例)。
  1. public constructor(driver: ConnectDriver) {
  2.         this._driver = driver;
  3. }
复制代码
先定义通用的网络通讯数据结构。此中请求分为数据和控制两种范例,用于区分心跳、登录、重连
  1. /**
  2. * 请求类型
  3. */
  4. export enum RequestType {
  5.     DATA = 1,
  6.     CTRL
  7. }
  8. /**
  9. * 网络通信数据结构
  10. */
  11. export interface NetData {
  12.     seq?: number; // 序列号
  13.     mod: number; // 模块
  14.     cmd: number; // 命令
  15.     path?: string; // 路径
  16.     data?: any; // 数据
  17.     tmpData?: any; // 数据处理器临时数据
  18.     status?: number; //状态码
  19.     type?: RequestType;  //请求类型
  20. }
复制代码
然后定义通用的对外接口
  1. public open(url: string, port: number, isBinary: boolean, timeout: number, retryCount: number, params: any, cb: (succ: boolean) => void): void {}
  2. public close(): number {}
  3. public reopen(cb: (succ: boolean) => void): void {}
  4. public sendData(data: NetData, params: HttpReq | any, succCb: (data: NetData) => void, failedCb: (code: number, reason: string) => void): void {}
  5. public resendNotRecv(): void {}
复制代码
此中resendNotRecv用于重连后发送没有收到响应的包,后端根据序列号决定是否处置惩罚。
这里没有对推送的处置惩罚,实际上推送是吸收到服务端数据后,调用广播给监听者。下面定义监听者
  1. /**
  2. * 网络连接事件监听接口
  3. */
  4. export interface ConnectEventListener {
  5.     onOpen(driver: ConnectDriver);
  6.     onClosed(driver: ConnectDriver);
  7.     onError(driver: ConnectDriver, msg: string);
  8.     onSendStart(driver: ConnectDriver);
  9.     onRecvEnd(driver: ConnectDriver);
  10. }
  11. /**
  12. * 网络事件监听接口
  13. */
  14. export interface NetEventListener extends ConnectEventListener {
  15.     onPush(driver: ConnectDriver, data: NetData): void;
  16. }
复制代码
对外提供注册和移除接口
  1. public addEventListener(listener: NetEventListener): void {}
  2. public removeEventListener(listener: NetEventListener): void {}
复制代码
针对第三个标题,需要定义一些预处置惩罚器,在发送数据前和吸收到数据后,做拦截预处置惩罚。
  1. /**
  2. * 网络通信数据处理器接口
  3. */
  4. export interface NetDataProcessor {
  5.     processReqData(data: any): any;
  6.     processRespData(data: any): any;
  7. }
复制代码
对外提供添加和移除接口,如许就可以机动定义通讯数据格式
  1. public addDataProcessor(processor: NetDataProcessor): void {}
  2. public removeDataProcessor(processor: NetDataProcessor): void {}
复制代码
针对第四个标题,同样是增长一个特别的拦截器,在请求发送前对其处置惩罚,假如拦截器能处置惩罚,就不再发送给后端。
  1. /**
  2. * 模拟服务器接口
  3. */
  4. export interface SimServer {
  5.     handleRequest(data: NetData): NetData;
  6. }
复制代码
对外提供设置接口
  1. public setSimServer(server: SimServer): void {}
复制代码
针对第五个标题,全部数据请求都有序列号,对请求举行记录,没有响应的请求包放到一个队列里,重连后重发这些包给后端处置惩罚
  1. public resendNotRecv(): void {}
复制代码
以上就是CocosCreator入门教程之网络通讯的详细内容,更多关于CocosCreator网络通讯的资料请关注脚本之家其它相关文章!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作