收藏
回答

websocket同步问题(解决同时最多发起 5 个 socket 请求限制)?

直接上代码:

var getState = function (url{
  return new Promise(resolve => {
     var ws = wx.connectSocket({
      url: url,
      data: {},
      method'GET',
      success(res) {},
      fail() {}
    });
       ws.onOpen((res) => {
          ws.send({data"发送请求"});
       });
       ws.onMessage((res) => {
         resolve(res);
         ws && ws.close();
       });
  });
 }
// 调用
arrData.forEach(async (item, index) => {
    await getState(url).then((res) => {
       console.log('处理中...' + index);
    });
    console.log('成功处理!' + index);
});


// 错误提示:
处理中...0
成功处理!0
处理中...1
成功处理!1

同时最多发起 5 个 socket 请求,更多请参考文档
Uncaught (in promise) thirdScriptError
{"errMsg":"closeSocket:fail task not found"}
Object


可以同步,但好像关不了socket ?

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

5 个回答

  • 冬晨
    冬晨
    2022-06-14

    我是在小程序切换到后台后会关闭连接,但是当用户频繁切换到后台会导致 socket 请求 超过五个,已经关闭的连接怎么也算在同时发起的个数里面

    2022-06-14
    有用
    回复
  • carpe diem
    carpe diem
    2022-02-09

    请问解决了吗,这个是解决方案吗

    2022-02-09
    有用
    回复
  • sxr
    sxr
    2021-10-13

    确实,我close了也没法开辟超过5个

    2021-10-13
    有用
    回复
  • 阿国
    阿国
    2020-03-21

    自己解决了问题:不能使用 "forEach" 改用 "for" 就可以了;使用forEach还是会并发执行异步操作。

    2020-03-21
    有用
    回复
  • Geefib
    Geefib
    2020-03-20

    wx.connectSocket 之后会返回一个 socketTask

    在发起链接的时候 connectSocket 需要接收返回的对象,如果监听和关闭

    请查api中SocketTask 相关的api


    SocketTask.close()


    2020-03-20
    有用
    回复 4
    • 阿国
      阿国
      2020-03-20
      @Geefib 代码中已经写了。
      2020-03-20
      回复
    • 哄哄
      哄哄
      2022-05-04回复阿国
      ws.close() 之后,给ws赋空值试试呢? ws = '';
      2022-05-04
      回复
    • 饼
      2023-07-07回复阿国
      楼主后面怎么解决的,我是进页面connectSocket,退页面close,但是操作五次就提示超出五个socket了
      2023-07-07
      回复
    • 阿国
      阿国
      2023-10-13
      这种写法早就被取消了,一个页面只能一个socket
      2023-10-13
      回复
登录 后发表内容
问题标签