版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章网络游戏编程浙江大学软件学院梁秀波Email:网络游戏的根本架构网络游戏通信协议网络游戏多线程编程常见的游戏开发网络框架Cocos2d-x中的网络通信游戏实例——坦克大战网络版小结主要内容网络游戏的通信传输结构封装层:根本数据类型的读写传输层:数据压缩和加密应用层:发送和接收封装好的数据包网络游戏的根本架构对等通信结构〔peer-to-peer〕网络游戏的最常见的根本架构对等通信结构图示网络游戏的根本架构会话大厅架构网络游戏的另一种架构是基于游戏大厅代理的架构,为不同玩家牵线搭桥,既直接管理客户端,也管理游戏局,是回合制网络游戏的常见类型。网络游戏的根本架构会话大厅架构图示网络游戏的根本架构客户端/效劳器架构特别适合于多人同时在线游戏,如RPG,成千上万人进行同一场游戏。在效劳器上有完整的游戏世界模型,玩家在客户端去观察和操纵这个世界,并与之互动。网络游戏的根本架构客户端/效劳器架构图示网络游戏的根本架构客户端/效劳器架构例如网络游戏的根本架构一个典型的基于C/S架构的回合制游戏的运行流程如图定义游戏通信协议是在网络模型的应用层定义的一个高层通信协议,类似于FTP和SMTP协议等,使得网络游戏的客户端和效劳器端程序通过预先设定好的格式传输数据。网络游戏通信协议例子——简单邮件传输协议过程客户端与效劳器建立TCP连接客户端发送HELLO命令标识发件人身份客户端发送MAIL命令,效劳器以OK应答客户端发送RCPT命令,标识电子邮件接收人客户端发送“.”,表示会话结束客户端发送QUIT命令,结束会话
网络游戏通信协议游戏通信协议特点根据游戏开发者主观要求制定通信协议的要求并不严格游戏通信协议常用组织方式XMLJSON网络游戏通信协议游戏通信协议结构-XML网络游戏通信协议<Data><Version><%Version%></Version>//版本信息<GameName><%GameName%></GameName>//游戏名字<GameType><%GameType%></GameType>//游戏类型<UserID><%UserID%></UserID>//用户ID......</Data>游戏通信协议结构-JSON网络游戏通信协议{ “Version”:%Version%, “GameName”:%GameName%, “GamaType”:%GameType%, “UserID”:%UserID%}协议打包/解包注意:协议打包/解包的实现代码应该最大限度地保持通用性和灵活性。游戏通信协议并不是一个标准的协议,很有可能在游戏开发过程中需要不断地修改和补充,甚至推倒重来。协议打包/解包程序的编写必须从一开始就尽量做到内核的独立性,只留几个协议相关的外部接口。这样,即使协议发生了很大的变化,打包/解包代码也只需很少的修改即可。网络游戏通信协议网络游戏效劳器程序主要功能模块网络通讯业务逻辑处理数据存储守护监控效劳器实现一般是异步而非同步执行网络游戏多线程编程异步执行方式1——单进程多线程网络通讯、业务逻辑和数据存储等由不同的线程处理各线程处于同一进程,无独立监控进程架构简单,编码容易适用于小型网络游戏网络游戏多线程编程单进程多线程的缺陷更能模块集中于同一进程,无法应用分布式架构各线程状态难以监控,容易出现死锁单线程出错就容易导致效劳器进程崩溃网络游戏多线程编程异步执行方式2——多进程单线程网络通讯、业务逻辑和数据存储等由不同的进程处理各进程只有单个线程,并发性强允许不能进程分布于不同效劳器适用于大型网络游戏网络游戏多线程编程多线程例子网络游戏多线程编程std::threadthreadTest(&HelloWorld::testThread,this);mainStd::cout<<“mainthread”<<endltestThread(){ CCLOG("inmy thread");}常见网络库——Boostasio〔高性能网络开发库〕具有稳定的跨平台特性方便的效劳器扩展机制易于使用提供了高层次的抽象
网络游戏多线程编程常见网络库——RakNet〔跨平台开源C++网络引擎〕 -高性能 -容易使用,在线用户手册全面 -扩平台,多平台支持良好 -在线技术支持 -平安传输,自动使用SHA1、AES128、SYN
网络游戏多线程编程常见网络库——Pomelo〔开源的Node.js效劳器框架〕快速、易上手高可伸缩的多进程架构方便的效劳器扩展机制方便的请求、响应、播送、效劳器通讯机制注重性能,在性能、可伸缩性上做了大量测试优化
网络游戏多线程编程HTTP网络通信简介HTTP是超文本传输协议,是互联网广泛使用的通信协议,是建立在TCP之上的一种协议,采用短连接形式,是无状态协议。HTTP协议特点
HTTP协议具有简单快速、灵活支持B/S及C/S模式Cocos2d-x中的网络通信——HTTPHTTPRequestCocos2d-x中的一种数据类型提供了一些方法用来定义和获取HTTP请求HTTPClientHttpClient用来处理异步的HTTP请求如果在请求里设置了回调函数,那么在请求完成之后,就会在主线程中调用该回调函数HTTPResponse一种数据格式,包括请求返回的数据等信息Cocos2d-x中的网络通信——HTTPGET通信方式用于获取信息平安的、幂等的提交较少量数据POST通信方式用于向效劳器提交数据,可能会修改数据提交数据量较大
Cocos2d-x中的网络通信——HTTPGET通信方式步骤创立HttpRequest对象设置请求的连接Url设置请求类型为GET设置请求标记Tag设置回调函数,回调中验证请求是否发送成功设置提交的数据释放创立的HttpRequest对象
Cocos2d-x中的网络通信——HTTPPOST通信方式步骤创立HttpRequest对象设置请求的连接Url设置请求类型为POST设置请求标记Tag设置回调函数,回调中验证请求是否发送成功设置提交的数据释放创立的HttpRequest对象
Cocos2d-x中的网络通信——HTTPSocket简介也称“套接字”由IP地址和端口组成,其中IP地址用来定位设备,端口号用来绑定应用程序或者进程。应用程序通常通过“套接字”向网络发出请求或者应答网络请求Socket连接过程:效劳器侦听:实时监控网络状态客户端请求:客户端套接字发出连接请求连接确认:效劳器响应客户端连接,并开启新线程Cocos2d-x中的网络通信——SocketSocket类型流式〔SOCK_STREAM〕:有序、可靠、基于连接数据报式〔SOCK_DGRAM〕:不可靠、无连接Cocos2d-x中的网络通信——Socket使用Cocos2d-x内部封装类实现1.继承代理类SIODelegate,实现4个虚函数: 〔1〕onConnect 〔2〕onMessage 〔3〕onClose 〔4〕onError2.翻开Socket连接Cocos2d-x中的网络通信——Socket使用Cocos2d-x内部封装类实现3.使用SIOClient提供的函数实现对Socket的控制: 〔1〕为Socket连接设置标记 〔2〕注册socket.io事件的回调函数 〔3〕向socket.io效劳器发送消息 〔4〕其他操作4.关闭Socket连接Cocos2d-x中的网络通信——SocketODSocket简介ODSocket是socket的一种简单的跨平台封装使用ODSocket实现步骤创立ODSocket对象对创立的ODSocket对象进行初始化根据设置好的IP地址和端口进行连接效劳器发送消息接收消息关闭连接Cocos2d-x中的网络通信——SocketODSocket例如主线程连接Cocos2d-x中的网络通信——Socket//引入头文件#include"ODSocket/ODSocket.h"voidHelloWorld::init(){//初始化ODSocketsocket;socket.Init();socket.Create(AF_INET,SOCK_STREAM,0);
//设置效劳器的IP地址,端口号并连接效劳器";ODSocket例如主线程〔续〕Cocos2d-x中的网络通信——Socketintport=12345;boolresult=socket.Connect(ip,port);Sts:threadrecThread=std::thread(&NetClient::UDPrecThread,this);recThread.detach();//从主线程别离
//发送数据Sendsocket.Send("login",5);}ODSocket例如开启接收消息的子线程Cocos2d-x中的网络通信——SocketvoidHelloWorld::receiveData(){//一直检测效劳端是否有数据传来while(true){chardata[512]="";//接收数据Recvintresult=socket.Recv(data,512,0);printf("%d",result);if(result<=0)break;//与效劳器的连接断开了CCLOG("%s",data);}socket.Close();//关闭连接WebSocket简介WebSocket是html5新增加的一种实现客户端与效劳器间的双向通信协议。WebSocket网络通信的实现,需要客户端与效劳器之间进行握手连接,即客户端中向效劳器发出WebSocket连接的请求,效劳器接收到请求后需要作出回应,连接成功后客户端与效劳器间就形成一条通道,可以快速进行消息的传递。Cocos2d-x中的网络通信——WebSocketWebSocket相比于传统HTTP协议的优势请求Header小效劳器可以主动向客户端发送消息Cocos2d-x中的网络通信——WebSocketCocos2d-x实现WebSocket步骤1.继承WebSocket代理类,实现4个虚函数: 〔1〕为Socket连接设置标记 〔2〕注册socket.io事件的回调函数 〔3〕向socket.io效劳器发送消息 〔4〕其他操作2.创立WebSocket的对象,并初始化Cocos2d-x中的网络通信——WebSocketCocos2d-x实现WebSocket步骤3.检测连接状态 〔1〕如果连接的状态是开启的,那么发送消息 〔2〕消息可以是字符串,也可以是二进制的4.关闭WebSocket连接Cocos2d-x中的网络通信——WebSocket游戏简介游戏改编自经典游戏《90坦克大战》,在经典单机模式的根底上,增加网络版本,多玩家同时在线进行游
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州城市职业学院《信息系统审计》2023-2024学年第一学期期末试卷
- 贵州财经大学《工业机器人本体设计》2023-2024学年第一学期期末试卷
- 2025年上海市安全员C证考试题库
- 2025云南省建筑安全员-B证(项目经理)考试题库
- 2025年上海市安全员知识题库及答案
- 广州珠江职业技术学院《汽车电子控制技术》2023-2024学年第一学期期末试卷
- 2025年河北建筑安全员《C证》考试题库
- 2025广东省安全员C证考试(专职安全员)题库附答案
- 广州应用科技学院《中国文化史》2023-2024学年第一学期期末试卷
- 广州新华学院《光电成像原理与技术》2023-2024学年第一学期期末试卷
- 2025版工业制造工程垫资建设合同2篇
- ISO 56001-2024《创新管理体系-要求》专业解读与应用实践指导材料之4:4组织环境-4.2理解相关方的需求和期望(雷泽佳编制-2025B0)
- 2024年一级支行行长竞聘演讲稿例文(4篇)
- 健身房销售人员培训
- 菌种保存管理
- 广东省广州市2022-2023学年高二上学期期末考试化学试题
- 期末测试卷(试题)-2024-2025学年四年级上册数学沪教版
- 中考必备高频词汇2600词(单词版)
- GB∕T 27552-2021 金属材料焊缝破坏性试验 焊接接头显微硬度试验
- 外贸中常见付款方式的英文表达及简要说明
- 抗压偏压混凝土柱承载力计算表格
评论
0/150
提交评论