socket-io传输unit8array问题

  • Creator 版本号:1.4.2
    目前用socket-io传输protobuf,用了较为新的protobuf生成了unit8array数组,但是这个数组传输到服务器后变成了Object导致解析失败。
    调查了一下原因,socket-io会检测发送的数据是不是buffer,但是检测使用的判断是是否为ArrayBuffer,但是,传入的是unit8array,所以socket-io把它当成字符串处理了。。。

creater的socket-io似乎也没有办法修改代码。。。
请教这个要怎么解决呢?

 onMessage: function(data) {
     let bufferArray = new Uint8Array(data);
     var msg = protobufjs.decode(bufferArray);
      // todo
},

这个是对从服务器返回的ArrayBuffer进行格式化的操作,我现在也是这么用。但是,我的问题是发送数据部分。
function json2protobuf(payload, msg) {
const errMsg = msg.verify(payload);
if (errMsg) {
console.log("json2protobuf : " + errMsg);
return false;
}

return msg.encode(msg.create(payload)).finish();
}
这个函数最终返回的是Uint8Array,并非ArrayBuffer。这样才导致了Socket-io把它识别为字符串。我尝试使用Uint8Array.buffer,但是似乎传送给了服务器一个很大的错误数据。最后,使用了如下方案‘骗’过了Socket-io,但是,Native能不能用还在测试。不知道各位大大,有没有什么正确的方案。。。

function json2protobuf(payload, msg) {
const errMsg = msg.verify(payload);
if (errMsg) {
console.log("json2protobuf : " + errMsg);
return false;
}

const data = msg.encode(msg.create(payload)).finish();
const blobData = new Blob([data]);
return blobData;
}

import protojs = require('protobufjs');
import { logger } from './../../utils/logger';

let root = protojs.loadSync(__dirname + '../../../../proto/base.proto');

function formatBuffer(buffer) {
    var bufferArray = Object.keys(buffer).map(function(k) {
        return buffer[k];
    })
    return bufferArray
}

export module protobufjs {
    export let encode = function(payload: any) {

        let protoMsg = root.lookupType('base.MessagePkg');
        var errMsg = protoMsg.verify(payload);
        if (errMsg) {
            logger.error(errMsg);
            return [];
        }

        let msg    = protoMsg.create(payload);
        let buffer = protoMsg.encode(msg).finish();

        return buffer;
    }

    export let decode = function(buffer: any) {
        let protoMsg = root.lookupType('base.MessagePkg');
        buffer = formatBuffer(buffer);
        let msg      = protoMsg.decode(buffer);
        return msg;
    }
}