如何在Node.js WebSocket服务器和C#客户端之间交换二进制数据?

我有最好的HTTP资源 Node.js WebSocket服务器和Unity客户端。 我用来传输JSON数据,但parsing成本太多的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) { }); }); 

主要问题:如何正确parsing二进制格式的数组(尤其是嵌套数组),然后编码到数组?

正常的二进制序列化可能是Web API的瓶颈如果你的对象定义良好,可以build模为类,我build议你使用Protobuf 。

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

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

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

两个图书馆都提供各种语言的实施,并经过了充分的testing