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

我有Node.js WebSocket服务器和带有Best HTTP asset的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) {
    });
});


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

最佳答案

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

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

本文翻译自 https://stackoverflow.com/questions/43356269/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c# node.js websocket arraybuffer uint8array


相关文章:

c# - 匹配字母数字字符,包括拉丁Unicode

c# - Invoke()和BeginInvoke()之间有什么区别

c# - 使用linq获取列表C#中部分匹配项的索引

c# - VS2013:Memory Profiler在特定项目上不显示任何内容

c# - 将两个列表转换为一个不同的列表

c# - 如何避免在不使用反射的情况下复制用于访问属性的代码

c# - C#向组合框添加长字符串

c# - 在Windows 10上自动连接到MS无线显示

c# - C#-静态类调用的意思是“地址内容? ”

c# - 在ASP.NET Core(Scaffold-DbContext)中搭建现有数据库