收藏
回答

关于 wx.request 的几个疑问

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小游戏 Bug wx.request 微信iOS客户端 最新 2.0.2
  1. 能不能使用 XMLHttpRequest ?  我使用 cocos creator发布到小游戏,用的XMLHttpRequest , 发的是byte[] ,在浏览器中收发没问题。在微信开发者工具中发送后, 服务端收到内容和客户端发送内容不一致。(发了40字节,服务器收到332字节)


  2. 小程序中提供的 wx.request API 和 小游戏中提供的 wx.request API 是一回事吗? 参数描述不一致啊! 小游戏中的wx.request 不能发送 ArrayBuffer?

    小游戏中:

        小程序中:


回答关注问题邀请回答
收藏

1 个回答

  • NRatel
    NRatel
    2018-05-01

    如果小游戏的 wx.request 能收发 ArrayBuffer, 请问正确姿势是什么。 急!在线等

    2018-05-01
    有用 1
    回复 5
    • Henry
      Henry
      2018-07-19

      你知道怎么发送Arraybuffer 嘛?

      2018-07-19
      回复
    • NRatel
      NRatel
      2018-07-21回复Henry

      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);

      });

      }


      2018-07-21
      回复
    • NRatel
      NRatel
      2018-07-21回复Henry

      不一致的原因是 不能发uint8数组,而是要把uint8转为arraybuffer。

      浏览器会自己转,微信不会

      2018-07-21
      回复
    • Henry
      Henry
      2018-07-21回复NRatel

      谢谢,我试一试!

      我要 在 当我收到的数据累积到了 64KB的时候,我把这个64KB数据发送给服务器!

      目前我是这样做的:开辟出一段连续的空间 var packet = new ArrayBuffer(64000),然后 把收到的数据 放到 packet 中,当 packet放满的时候 ,发送给 server,再次收到数据时 把数据 从 packet  的 byteOffset=0 这个位置重新放入!我的疑惑是这样做,有什么弊端,比如:会出现内存泄漏,溢出这些问题!要不要考虑 内存释放!

      2018-07-21
      回复
    • NRatel
      NRatel
      2018-07-23

      收到的数据累积到了 64KB的时候,我把这个64KB数据发送给服务器


      不知道这是你的实际需求,还是为了粘包?

      如果是为了粘包,

      发送方不需要考虑粘包的问题,要保证实时性,必须直接发。

      接收方 因为 Socket流的机制,一次接受到的消息不能保证独立完整,才需要粘包。


      2018-07-23
      回复
登录 后发表内容