Golang游戏服务器Leaf接入FlatBuffer步骤记录(附微信开发者平台接入FlatBuffer步骤3)

本文记录了使用Golang游戏服务器Leaf框架接入FlatBuffer的过程,以及解决微信游戏不支持FlatBuffer的问题。在测试后确认FlatBuffer可以用于微信H5游戏。文章详细阐述了FlatBuffer在Leaf框架中如何绕过序列化和反序列化,以及在msgRawHandler中实现数据分发。同时,分享了解决微信环境中flatbuffer.js访问问题的技巧,以及客户端如何处理服务器发送的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么不用Json,效率低

2.为什么不用ProtoBuffer,Laya发布的微信游戏不支持,在官方社区问了一万年官方也没给出个具体的实现方案后,转向了FlatBuffer。开始并不知道能不能用,会不会出现各种问题,因为微信是阉割版的H5所以刚开始并不确定能不能用。在测试过后,明确的告诉各位看客,是可行的。

3.什么是Golang,什么是Leaf这里就不回答了,给出Leaf的连接。Leaffffffffffffffffffffffffff

FlatBuffer作为通讯协议,要满足以下几个条件。

1.要接入Golang编写的服务器要支持Golang,

2.要接入微信开发者平台要支持JavaScript

FlatBuffer这两个都支持,剩下的就是遇水搭桥,逢山开路,一点一点跑通整个流程。

Leaf是个框架有一整套的流程其中,其中对于来自于客户端的请求消息都是由Processor来处理的,发送也是由Processor来发送。

Process在处理完毕序列化和反序列化后,把数据要么通过channal传给其他模块去处理,要么通过建立的客户端连接connection把数据发送出去。

其中Leaf提供了2种数据的序列化处理 1.Json 2.ProtoBuffer

这两种都有序列化和反序列化的处理,如果再写一个也不难,

难就难在FlatBuffer不需要序列化,也不需要反序列化,如果走框架就很麻烦。

为什么麻烦?因为如果想要在Processor Unmarshal这一步拿到FlatBuffer的具体类型,根本不可能啊?FlatBuffer的对象都是这么来的,MyGame.Monster.getRootAsMonster(data),意味着每一个类都有一个自己的“构造”方法了,没有办法通用处理。

但是如果把数据能进入到具体处理那个消息自己的处理函数,这样是不是就可以在那里再具体的调用各自的构造方法去实例化这些数据所代表的对象呢?

最后发现在Route分发数据的时候,数据分为两种格式一种是MsgRaw的格式,一种是当前正在应用的格式。比如如果用的是Json那么就是Json.Unmashal序列化出来的类型。如果是ProtoBuffer那么就是proto.Message这种类型。

MsgRaw说穿了,就是[]byte,没有经过任何处理。

但是FlatBuffer自己本身就是二进制,根本不用序列化和反序列化,是不是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值