游戏开发协议(转)

转自:http://erlangdisplay.iteye.com/blog/1012785

Erlang游戏开发-协议

选择什么协议? 
协议包含通讯协议和数据格式. 
通讯协议 
通讯协议目前常用的是:HTTP 和TCP .其有各自的特点根据游戏的特点而进行选择. 
HTTP 
HTTP比较成熟,使用极其广泛.具有丰富的基础软件和工具. 
对于简单的social game可以使用HTTP作为通讯协议. 
这类游戏对实时性要求不是很高,使用HTTP也很容易做到性能扩展,可以较好的满足需求. 
如果游戏前端使用HTML+js开发,那么只能使用HTTP了,需要较好的交互性和实时性时,只能 
使用HTTP长轮询来实现了.如果前端使用flash开发,游戏交互复杂,实时性要求高,那么HTTP 
便不合适了. 
TCP 
HTTP是高级的应用协议,而TCP便是比较基础的协议了.HTTP也是基于TCP实现. 
对于一些web game,基本上采用TCP.其并发量不大(单服web game通常在线千人左右),而 
实时性要求很高,尤其是ARPG游戏.因此TCP是不二选择.其前端大多使用flash实现(因为 
HTML5之前,html+js无法创建TCP socket).至于非80,非443端口的防火墙问题,貌似现在 
的网络环境下可以忽略. 
数据格式 
文本格式,比如xml,json或自定义均可作为传输的数据格式,文本格式最大的好处是可读, 
便于调试,缺点是数据量比较大,冗余信息太多.(当然可以通过压缩来弥补).因此在web 
game中很少使用文本作为数据传输格式.

除却文本就是二进制协议了.二进制协议也分多种:protobuf,thrift等通用二进制传输协议和 
自定义二进制格式.使用protobuf和thrift的好处是通用性,多种语言均支持,再一个规模比较 
大,使用多种开发语言的环境中比较合适.作为web game,通常是一个工作室负责一款产品, 
client和server使用的技术和语言相对确定,因此这些通用二进制传输协议就不是最好的选择,
同时,其因为通用,也导致了一些性能下降.

目前大部分游戏是采用自定义二进制协议,基本结构为:头部几个字节表示数据体长度,随后为 
数据体.在数据体中,可以划分出几个字节(如2个)表示某种消息.我们会为每种消息都定义数据
格式. 其大致的样子如下: [2字节数据长度][2字节消息类型,具体的消息体]. 
Erlang中如何处理? 
再Erlang中实现这样的协议非常简单, 设置inet:setopts/2的 packet 选项为2,便可支持我们上面 
的协议.Erlang自动会首先获取2个字节,作为长度,随后继续接受数据,知道这个包接收完成, 
省去了我们自己处理解包,粘包的痛苦 :)(注意2个自己使用无符号的big-endian编码方式). 
有了数据体,接下来需要处理2个字节的消息类型,Erlang还提供了一个贴心的选项:{header , size}(注意这个选项只有在socket设置binary选项的时候有效).再这里我们设置{header, 2},这样我们收到的数据体,不是一整块,而是这样:[Byte1, Byte2 | Binary],Byte1,Byte2是Erlang为我们截取出的数据体的头2个字节. 对于熟悉Erlang的朋友,我提一个问题: 
这个数据是格式规则的列表么?答案是No,这个列表是一个"畸形"的列表,因为其最后一个元素不是列表.有些绕远了… 

还有,在Erlang中TCP,拥有一个active 选项,其取值为:true, false, once.看过书的都明白,其是用来控制TCP数据的接收方式.通过使用 inet:setopts(Sock, [{active, once}]),我们可以让数据乖乖的听话,主动发给我们一个数据,然后变不主动,我们处理完这个消息后,然后在设置active once,其继续再发给我们一个数据. 这样的好处是,不会因为{active, true},给我们发送了大量的数据,导致我们应接不暇.也不会让我们每次都手动 gen_tcp:recv/2数据,那么累人.

游戏中协议的消息类型达上百中,这个过程如果手工编码会非常累,应该在开始的时候,再确定好协议格式后,就书写脚本完成协议编解码的自动生成,一劳永逸!大大减少调试出错的可能.协议修改后,通过一个命令就可以重新生成代码.非常happy.(有的团队,更加geek,直接使用erlang:term_to_binary作为二进制协议,由flash端进行erlang term的解析,非常强大).

最后就是要动手,首先把网络和协议搞定,游戏之路就开始了

时间: 2024-11-05 14:37:42

游戏开发协议(转)的相关文章

Erlang游戏开发-协议

Erlang游戏开发-协议 选择什么协议? 协议包含通讯协议和数据格式. 通讯协议 通讯协议目前常用的是:HTTP 和TCP .其有各自的特点根据游戏的特点而进行选择. HTTP HTTP比较成熟,使用极其广泛.具有丰富的基础软件和工具.对于简单的social game可以使用HTTP作为通讯协议.这类游戏对实时性要求不是很高,使用HTTP也很容易做到性能扩展,可以较好的满足需求.如果游戏前端使用HTML+js开发,那么只能使用HTTP了,需要较好的交互性和实时性时,只能使用HTTP长轮询来实现

C++游戏开发需要阅读的书籍

如果要自学游戏程序开发的话,可以看看下面的,呵呵. 游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦):  1.Gamebryo 2.2游戏引擎(盛大.腾讯等公司制作网络游戏常用)+Gamebryo v2.2.1说明文档 2.游戏PDF书及其代码:  3D游戏编程.3D游戏编程大师技巧.Direct3D游戏编程入门教程第2版.DirectX角色扮演游戏编程  DirectX特效游戏程序设计.MFC windows程序设计第2版.MFC深入浅出.VC+

GuidelinesOfGameDevelopment游戏开发新手指引

# GuidelinesOfGameDevelopment Just give out some experience or directions on game development to green hands.分享经验或路线给新手们 正文:最新指引链接 游戏类型:手游.端游.页游.家用游戏(电视) 游戏相关职位: 客户端: 游戏逻辑(常见功能和特色功能开发),将用户体验做到极致,未来方向应该是主程.游戏制作人和游戏玩法创新.C#或Lua.js.我想说,让Lua滚出游戏界,算了,还是我退出

[转载]HTML5游戏开发资源

https://github.com/vicalloy/html5gamedev/blob/master/README.md 游戏引擎 名称 许可协议 流行度 Github Watch 关键特性 备注 Phaser MIT   4000+ TypeScript, 2D, WebGL 使用Pixi.js作为图像引擎.功能完善,并提供了超过的250+的范例.推荐使用 Pixi.js MIT   4000+ 2D, WebGL Pixi.js 是一个 2D webGL 渲染器,在浏览器不支持WebGL

Unity3D游戏开发之网络游戏服务器架构设计培训(如何做一名好主程)

在我们初期学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发.后面就应该朝着主程的方面前进 今天给大家讲一下如何做一个好的主程 入手 假如,我现在接手一个新项目,我的身份还是主程序.在下属人员一一到位之前,在和制作人以及主策划充分沟通后,我需要先独自思考以下问题: 1.服务器跑在什么样的操作系统环境下?2.采用哪几种语言开发?主要是什么?3.服务器和客户端以什么样的接口通讯?4.采用哪些第三方的类库? 除了技术背

Cocos2d-x游戏开发技术精解读书摘要(2016-5-27 10:52)

 Cocos2d-x游戏开发技术精解 刘剑卓 著 2013年6月第1版 chap2 Cocos2d-x引擎的开发环境 2.1跨平台的开发 2.2建立开发环境 2.2.1 PC开发环境 2.2.2 Android开发环境 2.2.3 iOS开发环境 2.3引擎中的混合编译 2.3.1 Java与C++的混合编译 2.3.2 Objective-C与C++的混合编译 2.4引擎的起点 2.4.1应用程序入口 2.4.2引擎应用入口 2.5丰富的示例程序 2.5.1 TestCpp示例项目 2.5

上班的第四百六十八天——第一次参与游戏开发

今天是我参与游戏开发的第一天,用一个字形容吧,就是"累". 说实话,我明天已经不想去了.看着他们个个油光满面,连头发都是油的,身上还有股味道,就知道昨天晚上加班太晚,没时间洗澡,其实这个我是能忍的.但是看着他们个个都驼背,薄弱的身躯显得肚子特别大,好像被一座大山压了很久那样子,眼睛里补满血丝,主程更是咳到心口痛.作为程序员,应该是属于精英分子,但是他们的样子告诉我,这是农民工啊!我开始急躁了,我做下去是不是也会这样呢? 当然,这个只是其次.最主要还是工作内容,我应聘的是C++游戏服务器

MMORPG游戏开发入门(转)

原著:Radu Privantu 译者序:这是一篇讲解如何开发一款MMORPG的入门文章,作者本人也是一款游戏的开发者,文中的内容源于实践,有很高的参考价值.很多人都想拥有自 己的游戏,这篇文章对那些想自己开发游戏的人来说可能是一纸福音,也可能是一盆冷水.无论如何,开发游戏都不是一件简单的事情.以下是翻译正文: 文章的中心是如何起步开发你自己的大型多人在线角色扮演游戏( 原文:Massive Multiplayer Online Role Playing Games) (MMORPG)(译者注:

Unity3D游戏开发从零单排(七) - NetworkView的Demo

提要 今天做了一个移动设备的网络通信demo,分两个部分,一个是网络连接,一个是数据通信. 需要两台Android设备A,B.A作客户端,B作服务端. 最终的效果是玩家控制设备A中的方块,B中的方块也一起动,同时在A的加速度传感器的信息在B中也实时更新. 网络连接 首先两台设备要联网,且IP在同一个网段,比如连接在同一个路由上,或者通过笔记本发出wifi信号,然后把设备连在上面. 在Unity3d中创建一个新工程,在场景中创建两个空物体,一个Client,一个Server. 在client创建一