首页 » 网站推广 » cocoscreatephp技巧_游戏架构数据交换协议

cocoscreatephp技巧_游戏架构数据交换协议

访客 2024-12-04 0

扫一扫用手机浏览

文章目录 [+]

举一个例子 如果我们要发送一段 文本 例如123 那么 我们的就通过我们定义的通讯协议把123 发送给做事器,做事器吸收到之后 取出123 个中这个文本的定义被我们定义成数据交流协议。

在游戏开拓中常用的数据交流协议 有 :string ,JSON ,C++ 构造体, protobuffer ,flatbuffer,等等一系列 数据交流协议,当然你也可以自定义。

cocoscreatephp技巧_游戏架构数据交换协议

在这么多协议中如何选择呢。

cocoscreatephp技巧_游戏架构数据交换协议
(图片来自网络侵删)

文本

这个是很随意马虎想到一个协议,由于大略,不过缺陷也非常明显,没有约束,格式不明确,需自己写解析类。
在那登录来说,如果我要发送用户名和密码,那么我们可能会这么写 用户名,密码这个做事器拿到数据之后根据逗号拆分出用户名和密码 来进行校验。
如果这个时候我的通报的构造更繁芜呢?就会创造这个在开拓中就会产生巨大的沟通本钱。

JSON

JSON(JavaScript Object Notation, JS 工具简谱) 是一种轻量级的数据交流格式。
它基于 ECMAScript (欧洲打算机协会制订的js规范)的一个子集,采取完备独立于编程措辞的文本格式来存储和表示数据。
简洁和清晰的层次构造使得 JSON 成为空想的数据交流措辞。
易于人阅读和编写,同时也易于机器解析和天生,并有效地提升网络传输效率。

每种措辞的都有自己对应的解析类,看起来是一个不错的选择。
还拿登录举例子{"userName":"用户名","pwd":"密码"} 看起来完美办理了文本传输带来的问题。
但是实在问题还没有办理掉,问题1:我想传输 是是用户名和密码,但是实在增加了额外的传输 例如 我要传输userName 和pwd 这些描述。
网络带宽额外的增加了。
问题2 json 实在不能很好的表示数据类型,例如userName 到底是字符串还是number 类型。
这也就导致了 须要额外的书写一份文档。

C++ 构造体

如果客户段和做事器的都是用C ++写的 那么这无疑是最好的选择,速率快,占用内存还少。
但是一样平常情形下 我们只能哀求做事器是C++写的,客户端是无法逼迫哀求的,由于前端 例如unity 紧张是C#代码 作为开拓 cocoscreate 紧张用 js 作为代码,当然也有用的C++的例如虚幻,cocos2d-x 等等 ,每种引擎都有自己的试用场景,以是无法逼迫哀求客户端。
如果选择别的措辞,对付解析构造体就会很麻烦,虽然也能做。
但是我们有没有更好的办理方案呢

protobuffer

protobuffer是google开拓的一种数据描述措辞,它能够将构造化的数据序列化,并切可以将序列化的数据进行反序列化恢复原有的数据构造。
一样平常用于数据存储以及通信协议方面。

Package example;message Person{ required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType{ mobile = 1; home = 2; work = 3; } message PhoneNumber{ required string number = 1; optional PhoneType type = 2; } repeated PhoneNumber phone = 4;}

上面的这个便是一个protobuffer 一个构造的定义,这个基本就办理JSON 的缺陷。
他在网络传输的时候利用的是二进制传输,现在protobuffer 险些供应了市情上主流的措辞的支持。
须要查看详细用法的可以去看官方文档,基本便是5分钟可以上手。

FlatBuffers

FlatBuffers为Google发布的一个跨平台,供应多种措辞接口,看重性能和资源利用的序列化类库。
目前该类库供应C++, C#, C, Go, Java, JavaScript, PHP, and Python措辞接口。
该序列化类库多用于移动端手游数据传输以及特定的对性能有较高哀求的运用。

namespace MyGame;attribute "priority";enum Color : byte { Red = 1, Green, Blue }union Any { Monster, Weapon, Pickup }struct Vec3 { x:float; y:float; z:float;}table Monster { pos:Vec3; mana:short = 150; hp:short = 100; name:string; friendly:bool = false (deprecated, priority: 1); inventory:[ubyte]; color:Color = Blue; test:Any;}root_type Monster;

上面是一个FlatBuffer 的定义,从构造来说 和proto 很想, 那么两者有什么差异的。
最大的差异便是性能。
其他并无太大差别。
如果你看了详细的协议文档你会创造FlatBuffers 更适宜游戏,当然笔者的部分游戏便是采取的这个协议。

不过FlatBuffers和protobuffer最大问题便是调试未便利,由于传输的时候都是二进制,以是在调试不是很方便,不过他的优点足以粉饰他的确定,以上两种基本都供应完全的类库供大家利用,在利用过程中并不会觉得有什么问题。

至于以上协议大家想采取那些须要根据项目来选择,并不是说最好的一定是最得当的。
须要根据项目的需求来决定。

以上便是我个人的一些总结,可能不是全面。
如果有疑问,大家可以关注我,私信或者在评论区留言。

标签:

相关文章

介绍直播新纪元,轻松进入直播的五大步骤

随着互联网技术的飞速发展,直播行业在我国逐渐崛起,越来越多的人选择通过直播这一新兴媒介展示自己、分享生活、传递价值。对于许多新手来...

网站推广 2025-01-03 阅读1 评论0

介绍相机美颜原理,科技与美学的完美结合

随着科技的发展,智能手机的摄像头功能日益强大,美颜相机成为了许多人拍照的首选。美颜相机不仅满足了人们对于美的追求,更在视觉上给人带...

网站推广 2025-01-03 阅读1 评论0

介绍磁铁的制造,科学与艺术的完美结合

磁铁,一种神秘的物质,自古以来就吸引了无数人的目光。它不仅具有独特的磁性,还能在工业、医疗、科研等领域发挥重要作用。磁铁是如何制造...

网站推广 2025-01-03 阅读1 评论0

介绍电瓶激活方法,让电池焕发新生

随着科技的不断发展,电动汽车逐渐成为人们出行的首选。而电瓶作为电动汽车的核心部件,其性能直接影响着车辆的续航里程和行驶体验。新购买...

网站推广 2025-01-03 阅读1 评论0