能不能使用 XMLHttpRequest ? 我使用 cocos creator发布到小游戏,用的XMLHttpRequest , 发的是byte[] ,在浏览器中收发没问题。在微信开发者工具中发送后, 服务端收到内容和客户端发送内容不一致。(发了40字节,服务器收到332字节)
小程序中提供的 wx.request API 和 小游戏中提供的 wx.request API 是一回事吗? 参数描述不一致啊! 小游戏中的wx.request 不能发送 ArrayBuffer?
小游戏中:
小程序中:
如果小游戏的 wx.request 能收发 ArrayBuffer, 请问正确姿势是什么。 急!在线等
你知道怎么发送Arraybuffer 嘛?
static XMLHttpRequest(reqUrl, reqMsg) {
return new Promise((resolve, reject) => {
let httpInstance = new XMLHttpRequest();
httpInstance.responseType = "arraybuffer"; //需要byte[]返回值时开启,否则默认返回为string
httpInstance.timeout = 15000;
httpInstance.onreadystatechange = () => {
if (httpInstance.readyState != 4) { return; }
if (httpInstance.status != 200) {
let errMsg = "错误状态码: " + httpInstance.status;
return reject(errMsg);
}
let respBytes = new Uint8Array(httpInstance.response);
return resolve(respBytes);
};
httpInstance.open("POST", reqUrl, true);
// httpInstance.setRequestHeader("Content-Type", "application/octet-stream");
// httpInstance.setRequestHeader("Accept", "application/octet-stream");
httpInstance.send(reqMsg);
});
}
不一致的原因是 不能发uint8数组,而是要把uint8转为arraybuffer。
浏览器会自己转,微信不会
谢谢,我试一试!
我要 在 当我收到的数据累积到了 64KB的时候,我把这个64KB数据发送给服务器!
目前我是这样做的:开辟出一段连续的空间 var packet = new ArrayBuffer(64000),然后 把收到的数据 放到 packet 中,当 packet放满的时候 ,发送给 server,再次收到数据时 把数据 从 packet 的 byteOffset=0 这个位置重新放入!我的疑惑是这样做,有什么弊端,比如:会出现内存泄漏,溢出这些问题!要不要考虑 内存释放!
“收到的数据累积到了 64KB的时候,我把这个64KB数据发送给服务器”
不知道这是你的实际需求,还是为了粘包?
如果是为了粘包,
发送方不需要考虑粘包的问题,要保证实时性,必须直接发。
接收方 因为 Socket流的机制,一次接受到的消息不能保证独立完整,才需要粘包。