接触了一段时间的网游封包设计,有了一些初步的思路,想借这篇文章总结一下,同时也作个记录,以利于以后更新自己的思路。
网络游戏的技术研发,分为三个主要的方面:服务器设计,客户端设计,数据库设计。而在服务器与客户端之间实现游戏逻辑的中介则是游戏数据包,服务器与客户端通过交换游戏数据包并根据分析得到的数据包来驱动游戏逻辑。网络游戏的实质是互动,而互动的控制则由服务器与客户端协同完成,协同就必然要依靠数据来完成。 【相关文章:关于Array.BinarySearch】 【扩展阅读:复用函数之资料验证——减小您的工作量(一】 当前网络游戏中的封包,其定义形式是各种各样的,但归纳起来,一般都具有如下要素:封包长度,封包类型,封包参数,校验码等。 【扩展信息:序列化FastReport】 封包长度用于确定当前游戏数据包的长度,之所以提供这个数据,是因为在底层的tcp网络传输中,出于传输效率的考虑,传输有时会把若干个小的数据包合并成一个大的数据包发送出去,而在合并的过程中,并不是把每一个逻辑上完整的数据包全部合并到一起,有时可能因为这种合并而将一个在逻辑上具有完整意义的游戏数据包分在了两次发送过程中进行发送,这样,当前一次的数据发送到接受方之后,其尾部的数据包必然造成了“断尾”现象,为了判定这种断尾的情况以及断尾的具体内容,游戏数据包在设计时一般都会提供封包长度这个信息,根据这个信息接受方就知道收到的包是否有断尾,如果有断尾,则把断尾的数据包与下次发过来的数据包进行拼接生成原本在逻辑意义上完整的数据包。 封包类型用于标识当前封包是何种类型的封包,表示的是什么含义。 封包参数则是对封包类型更具体的描述,它里面指定了这种类型封包说明里所必须的参数。比如说话封包,它的封包类型,可以用一个数值进行表示,而具体的说话内容与发言的人则作为封包参数。 校验码的作用是对前述封包内容进行校验,以确保封包在传递过程中内容不致被改变,同时根据校验码也可以确定这个封包在格式上是不是一个合法的封包。以校验码作为提高封包安全性的方法,已经是目前网游普遍采用的方式。封包设计,一般是先确定封包的总体结构,然后再来具体细分有哪些封包,每个封包中应该含有哪些内容,最后再详细写出封包中各部分内容具体占有的字节数及含义。 数据包的具体设计,一般来说是根据游戏功能进行划分与圈定的。比如游戏中有聊天功能,那么就得设计客户端与服务器的聊天数据包,客户端要有一个描述发言内容与发言人信息的数据包,而在服务器端要有一个包含用户发言内容及发言人信息的广播数据包,通过它,服务器端可以向其他附近玩家广播发送当前玩家的发言内容。... 下一页