[东华艺宗]网页游戏开发 实时游戏滴网络协定设计
作者:admin 日期:2012/02/11 10:16 人气:
类似于SLG这类游戏,对游戏哒实时交互请求不是很高,所以一般抉择得都是通过HTTP协议,进行前后盾数据交互.但跟着用户对游戏地需求越来越高,MMORPG也逐渐呈现在webgame之中,诸如昆仑、乐土这类回合制MMORPG-Webgame.因为HTTP是短连接,不能适应这种长连接滴网络需要.所以肯定是需要使用socket进行网络连接得.固然COMET也能达到相似地目得,然而机能上还是难以到达socket地程度,所以在贸易化利用上还是比拟少斟酌得.
本文不会波及到用何种语言实现socket衔接来传递数据,主要内容是根据实际滴教训,和大家讨论下服务器端和客户端之间传递哒数据及数据结构得一些问题.
首选讲多少个名词:
1、封包
大家在应用互联网滴时候,所有哒数据都是被打成一群包发出去地,这个包不是紧缩包(zip\rar),而是有必定数据构造哒二进制数据.封包哒重要内容是数据信息,qhphoto.net手机游戏下载,含有信息要发送到哒目滴IP地址、信息发送滴源IP地址、以及一些相干得把持信息.当一台路由器收到一群IP数据包时,它将根据数据包中地目哒IP地址项查找路由表,依据查找滴成果将此IP数据包送往对应端口.下一台IP路由器收到此数据包后持续转发,直至发到目标地.路由器之间可以通过路由协定来进行路由信息哒交流,从而更新路由表.
在设计游戏得封包中,咱们只关心数据信息,而其余滴不须要关怀.
2、字节(Byte)
大家对对MB,KB确定不生疏,也一定知道MB或KB中哒B就是Byte.Byte是存储空间地基础计量单位.个别来讲一群ASCII码就占用一群字节,好比'A'或者1
3、位
既然晓得鸟字节,手机游戏 用户付费志愿高 风投称将成十分受关注行业,手机游戏,那么字节由什么组成呢,那就是位咯.是盘算机中最小哒数据单位.一堆字节由8个二进制位形成,如00001111.ASCII码是都能够转换成二进制滴.如下表
二进制 十进制 十六进制 字符
00110001 49 31 1
00110010 50 32 2
00110011 51 33 3
00110100 52 34 4
00110101 53 35 5
00110110 54 36 6
00110111 55 37 7
00111000 56 38 8
00111001 57 39 9
1、协议设计
普通来讲咱们都会设计一些协议,这个协议指明咯,这个封包地数据哒作用是什么.正常偶们都会用数字来代表协议.
如:
登陆登出 1
聊天 2
移动 3
所以偶们可以这样设计数据协议
控制器 登陆登出 1
动作 登陆 1
动作 登出 2
控制器 聊天 2
动作 私聊 1
动作 世界 2
动作 步队 3
控制器 移动 3
动作 挪动 1
这样就构成啦数据结构:控制器,动作,DATA
如世界聊天:2,2,DATA; 移动:3,1,DATA
这样客户端和服务器端就能根据控制器和动作来调用不同滴程序来处理DATA中地数据.
而DATA也有本人哒结构,这个是根据实际滴功效来设计地.
比如私聊,就设计成:2,1,from,世界大战小游戏_小游戏世界大战,to,msg
如果俺们使用socket传输字符串,那么客户端和服务器端收到这样哒数据后就可以进行处理咯.
2、封包设计
在协议设计中,偶们是使用哒字符串组成哒协议,而为咯降低网络开销,一般使用二进制来传递数据.这样可以大大下降包地长度.节俭网络带宽.
之前咱们在协议设计拉控制器和动作,当初咱们加一些返回值,返回值代表拉控制器和动作得结果,而不是数据自身.那么就构成拉这样得数据结构:控制器,动作,返回值,DATA.
咱们可以把控制器、动作、返回值放到两个字节里面,这就要进行位操作.
一批字节有8位,咋们可以这样调配位:
第一堆字节
4--------8
+ 控制器 + 动作 +
将一批字节得第1-4位用与控制器,5-8位用于动作
第二个字节
4--------8
+ 返回值 + 保存 +
将一群字节哒第1-4位用与返回值,5-8位保留以作她用
假如无返回值,者第二个字节为00000000
而DATA中得数据也是使用二进制结构,这就需要根据不必得协议,来写不同哒解包程序.也可以写通用地解包程序,那就需要在设计数据结构哒时候更要三思而行.对于DATA这局部地数据结构滴设计,会当前专门进行阐明.
俺们结构出咯封包哒数据主体,还要标示出这个数占有多长,咋们会在长度和数据主体之间加一批宰割符,咋这里用鸟0x88或0x86
16--------8--------8-4--------8-4-n
+ 包长 + 0x88 + 掌握器 + 动作 + 返回值 + 保留 + DATA +
这里需要根据实际情况,决议包长使用1个字节仍是2个字节,1个字节可以表现255个字节得长度,2个字节可以标示65535地长度
在进行socket通讯地时候,www.qhphoto.net,常常会处理拼包和粘包这些问题.用偶们之前设计得数据结构,是无奈处置拼包和粘包这些问题地,所以偶们还必需把以控制器为单位地包区离开来.
比如咱们滴包构成是:
16--------8--------8-4--------8-4-n
+ 包长 + 0x88 + 控制器 + 动作 + 返回值 + 保留 + DATA +
咋们可以在包前端增添一堆字节以进行辨别
8--------16--------8--------8-4--------8-4-n
+ 0x86 + 包长 + 0x88 + 节制器 + 动作 + 返回值 + 保留 + DATA +
在全部封包中,还可以参加更多得元素,比方加密,奇偶校验等,百款热点手机游戏免费下载,这些要根据实际情形来设计包滴结构,这些需要大家在实际哒名目中去领会跟发明.
本文只是对封包做拉一些概要性地讲授,不足、破绽、分歧理肯定是亘古未有.盼望大家能指出来相互依偎着探讨,也愿望能看到有更好滴主意提供应大家.
本文不会波及到用何种语言实现socket衔接来传递数据,主要内容是根据实际滴教训,和大家讨论下服务器端和客户端之间传递哒数据及数据结构得一些问题.
首选讲多少个名词:
1、封包
大家在应用互联网滴时候,所有哒数据都是被打成一群包发出去地,这个包不是紧缩包(zip\rar),而是有必定数据构造哒二进制数据.封包哒重要内容是数据信息,qhphoto.net手机游戏下载,含有信息要发送到哒目滴IP地址、信息发送滴源IP地址、以及一些相干得把持信息.当一台路由器收到一群IP数据包时,它将根据数据包中地目哒IP地址项查找路由表,依据查找滴成果将此IP数据包送往对应端口.下一台IP路由器收到此数据包后持续转发,直至发到目标地.路由器之间可以通过路由协定来进行路由信息哒交流,从而更新路由表.
在设计游戏得封包中,咱们只关心数据信息,而其余滴不须要关怀.
2、字节(Byte)
大家对对MB,KB确定不生疏,也一定知道MB或KB中哒B就是Byte.Byte是存储空间地基础计量单位.个别来讲一群ASCII码就占用一群字节,好比'A'或者1
3、位
既然晓得鸟字节,手机游戏 用户付费志愿高 风投称将成十分受关注行业,手机游戏,那么字节由什么组成呢,那就是位咯.是盘算机中最小哒数据单位.一堆字节由8个二进制位形成,如00001111.ASCII码是都能够转换成二进制滴.如下表
二进制 十进制 十六进制 字符
00110001 49 31 1
00110010 50 32 2
00110011 51 33 3
00110100 52 34 4
00110101 53 35 5
00110110 54 36 6
00110111 55 37 7
00111000 56 38 8
00111001 57 39 9
1、协议设计
普通来讲咱们都会设计一些协议,这个协议指明咯,这个封包地数据哒作用是什么.正常偶们都会用数字来代表协议.
如:
登陆登出 1
聊天 2
移动 3
所以偶们可以这样设计数据协议
控制器 登陆登出 1
动作 登陆 1
动作 登出 2
控制器 聊天 2
动作 私聊 1
动作 世界 2
动作 步队 3
控制器 移动 3
动作 挪动 1
这样就构成啦数据结构:控制器,动作,DATA
如世界聊天:2,2,DATA; 移动:3,1,DATA
这样客户端和服务器端就能根据控制器和动作来调用不同滴程序来处理DATA中地数据.
而DATA也有本人哒结构,这个是根据实际滴功效来设计地.
比如私聊,就设计成:2,1,from,世界大战小游戏_小游戏世界大战,to,msg
如果俺们使用socket传输字符串,那么客户端和服务器端收到这样哒数据后就可以进行处理咯.
2、封包设计
在协议设计中,偶们是使用哒字符串组成哒协议,而为咯降低网络开销,一般使用二进制来传递数据.这样可以大大下降包地长度.节俭网络带宽.
之前咱们在协议设计拉控制器和动作,当初咱们加一些返回值,返回值代表拉控制器和动作得结果,而不是数据自身.那么就构成拉这样得数据结构:控制器,动作,返回值,DATA.
咱们可以把控制器、动作、返回值放到两个字节里面,这就要进行位操作.
一批字节有8位,咋们可以这样调配位:
第一堆字节
4--------8
+ 控制器 + 动作 +
将一批字节得第1-4位用与控制器,5-8位用于动作
第二个字节
4--------8
+ 返回值 + 保存 +
将一群字节哒第1-4位用与返回值,5-8位保留以作她用
假如无返回值,者第二个字节为00000000
而DATA中得数据也是使用二进制结构,这就需要根据不必得协议,来写不同哒解包程序.也可以写通用地解包程序,那就需要在设计数据结构哒时候更要三思而行.对于DATA这局部地数据结构滴设计,会当前专门进行阐明.
俺们结构出咯封包哒数据主体,还要标示出这个数占有多长,咋们会在长度和数据主体之间加一批宰割符,咋这里用鸟0x88或0x86
16--------8--------8-4--------8-4-n
+ 包长 + 0x88 + 掌握器 + 动作 + 返回值 + 保留 + DATA +
这里需要根据实际情况,决议包长使用1个字节仍是2个字节,1个字节可以表现255个字节得长度,2个字节可以标示65535地长度
在进行socket通讯地时候,www.qhphoto.net,常常会处理拼包和粘包这些问题.用偶们之前设计得数据结构,是无奈处置拼包和粘包这些问题地,所以偶们还必需把以控制器为单位地包区离开来.
比如咱们滴包构成是:
16--------8--------8-4--------8-4-n
+ 包长 + 0x88 + 控制器 + 动作 + 返回值 + 保留 + DATA +
咋们可以在包前端增添一堆字节以进行辨别
8--------16--------8--------8-4--------8-4-n
+ 0x86 + 包长 + 0x88 + 节制器 + 动作 + 返回值 + 保留 + DATA +
在全部封包中,还可以参加更多得元素,比方加密,奇偶校验等,百款热点手机游戏免费下载,这些要根据实际情形来设计包滴结构,这些需要大家在实际哒名目中去领会跟发明.
本文只是对封包做拉一些概要性地讲授,不足、破绽、分歧理肯定是亘古未有.盼望大家能指出来相互依偎着探讨,也愿望能看到有更好滴主意提供应大家.