CocosCreator入门教程之网络通信_第1页
CocosCreator入门教程之网络通信_第2页
CocosCreator入门教程之网络通信_第3页
CocosCreator入门教程之网络通信_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第CocosCreator入门教程之网络通信开发一个网络游戏,难免要处理网络通信。有几点问题需要注意:

1.服务端为了快速开发可能前期使用http通信,后面再改成websocket/socket。

2.同时存在http和websocket/socket通信

3.通信数据格式可能需要随时替换为json或protocolbuffer,可能需要添加额外头部。

4.在新手引导里使用本地数据做模拟,请求不需要发送给后端。

5.重连后数据简单同步

针对第一、二个问题,我在设计通信模块时会考虑将通信尽量抽象为统一的对外接口,在游戏启动时通过不同的驱动器创建实例(如果只使用一种通信方式,使用单一实例)。

publicconstructor(driver:ConnectDriver){

this._driver=driver;

}

先定义通用的网络通信数据结构。其中请求分为数据和控制两种类型,用于区分心跳、登录、重连

*请求类型

exportenumRequestType{

DATA=1,

CTRL

*网络通信数据结构

exportinterfaceNetData{

seq:number;//序列号

mod:number;//模块

cmd:number;//命令

path:string;//路径

data:any;//数据

tmpData:any;//数据处理器临时数据

status:number;//状态码

type:RequestType;//请求类型

}

然后定义通用的对外接口

publicopen(url:string,port:number,isBinary:boolean,timeout:number,retryCount:number,params:any,cb:(succ:boolean)=void):void{}

publicclose():number{}

publicreopen(cb:(succ:boolean)=void):void{}

publicsendData(data:NetData,params:HttpReq|any,succCb:(data:NetData)=void,failedCb:(code:number,reason:string)=void):void{}

publicresendNotRecv():void{}

其中resendNotRecv用于重连后发送没有收到响应的包,后端根据序列号决定是否处理。

这里没有对推送的处理,实际上推送是接收到服务端数据后,调用广播给监听者。下面定义监听者

*网络连接事件监听接口

exportinterfaceConnectEventListener{

onOpen(driver:ConnectDriver);

onClosed(driver:ConnectDriver);

onError(driver:ConnectDriver,msg:string);

onSendStart(driver:ConnectDriver);

onRecvEnd(driver:ConnectDriver);

*网络事件监听接口

exportinterfaceNetEventListenerextendsConnectEventListener{

onPush(driver:ConnectDriver,data:NetData):void;

}

对外提供注册和移除接口

publicaddEventListener(listener:NetEventListener):void{}

publicremoveEventListener(listener:NetEventListener):void{}

针对第三个问题,需要定义一些预处理器,在发送数据前和接收到数据后,做拦截预处理。

*网络通信数据处理器接口

exportinterfaceNetDataProcessor{

processReqData(data:any):any;

processRespData(data:any):any;

}

对外提供添加和移除接口,这样就可以灵活定义通信数据格式

publicaddDataProcessor(processor:NetDataProcessor):void{}

publicremoveDataProcessor(processor:NetDataProcessor):void{}

针对第四个问题,同样是增加一个特殊的拦截器,在请求发送前对其处理,如果拦截器能处理,就不再发送给后端。

*模拟服务器接口

exportinterfaceSimServer{

handleRequest(data:NetData):NetData;

}

对外提供设置接口

publicsetSimServer(server:SimServer):void{}

针对第五个问题,所有数据请求都有序列号,对请求进行记录,没有响应的请求

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论