creator 怎么对接 c++服务器端用的struct作为解析协议

c++ 服务器端用的struct作为解析协议,creator有什么方式可以转成二进制数据发送给c++服务器解析, protobuf 这个不用,因为c++后端 用的struct 作为二进制解包数据,前端creator 可以用什么代码转二进制 发送给后端c++,进行struct 解析

问后端啊。后端怎么解析的,你要对应怎么编码

后端是用的struct 二进制 数据流, 我知道 cocos creator 和 后台c++ 都用protobuf 作为二进制协议可以做到通信, 现在服务器框架都写好了,都是struct 数据格式的,cocos creator 这边应该写什么样的二进制代码可以对接c++ 的struct 二进制流

该不会是棋牌吧……

和cocos没关系,你搜索一下js二进制就行了。
encode(msgId, data) { const buffer = data.serializeBinary(); const protoTypeId = parseInt(msgId); //Helper.Log("msgId:"+msgId+",msgLen:"+buffer.length); let byteArr = new ArrayBuffer(8 + buffer.length); const dv = new DataView(byteArr); dv.setInt32(0, buffer.length); dv.setInt32(4, protoTypeId); for (let i = 0; i < buffer.length; i++) { dv.setUint8(8 + i, buffer[i]); } return byteArr; }

趁早换protobuf吧。

换protobuf吧,c++的数据格式长度和js数据格式的长度不一致,C++希望是你直接把内存映射为对应的struct,其实相当于内存拷贝,js和c++目前来看不好实现这种功能。

600行TS代码搞定数据解包和发包

按照服务端定义的格式,客户端逐个解析或拼接。
例如:
服务端结构体按4字节对齐;
struct TLogin {
char szUserName[32];
char szPwd[32];
int32 iSource;
}

客户端用 ReadByte, ReadInt 从流中获取数据;
反之亦然…

:slightly_smiling:

已经确定后台用的struct,了 , cocos creator 如何应对

请亮出你的600行ts 代码

你是非科班出来的?从来没写过“数据解析”。序列化和反序列化应该也不知道。

:slightly_smiling:

问下服务端怎么编码解码的

服务端用ws或者socket, 客户端与之对应,然后处理数据流交给struct不就好了?网狐就是这样

用bytebuffer读取字节流就行了,
{
int,
short
}

readInt()
readShort()
原理一样的

注意大小端问题

估计是老板哪里买来的服务器代码,网狐
然后找一个客户端来改成cocos creator

为啥要亮呢,荣耀内核修改支持ws,反而后端耗时更久。前端的解包发包功能很快,但是也要过不少坑。