2

我有具有最佳 HTTP 资产的 Node.js WebSocket 服务器和 Unity 客户端。以前是传JSON数据,但是解析占用CPU资源太多。现在,我尝试从 C# 发送 byte[] 消息,如下所示:

//sending sample array - new float[] { 1.32, 3.12 }
//convert an object to a byte array
private byte[] ObjectToByteArray(Object obj)
{
    if(obj == null)
       return null;

    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    bf.Serialize(ms, obj);

    return ms.ToArray(); 
}

但是服务器收到了 Uint8Array [1, 3] 并且小数部分丢失了。

var wss = new WebSocket.Server({ port: 8080 });
wss.binaryType = "arraybuffer";
wss.on('connection', function connection(ws) {
    ws.on('message', function (message) {
    });
});

主要问题:如何正确解析二进制格式的数组(尤其是嵌套数组)并编码为数组?

4

2 回答 2

1

正常的二进制序列化可能是 Web API 的瓶颈 如果您的对象定义明确并且可以建模为类,我建议您使用Protobuf

最棒的是它是跨平台的,您可以对 NodeJS 服务器和 C# 客户端使用相同的定义。

于 2017-04-11T21:45:49.380 回答
0

您可以尝试二进制 json BSON http://bsonspec.org/implementations.html

或 MSGPACK http://msgpack.org/index.html

这两个库都提供各种语言的实现,并且经过了很好的测试。

于 2017-04-11T21:20:56.793 回答