大话疼
大话疼
  • 发布:2019-05-20 09:49
  • 更新:2021-11-30 09:49
  • 阅读:9423

uni-app,websocket多个连接会失效

分类:uni-app

hbuilderX 1.8.2之后的版本,1.8.2版本可以用,uni-app的websocket创建一个之后,再创建另一个,之前创建的就不能用了,也没触发close,但是就是不能用了。
在h5端可以使用,在app端不能用。
非常急,希望尽快修复

2019-05-20 09:49 负责人:无 分享
已邀请:

最佳回复

DCloud_App_Array

DCloud_App_Array

自定义组件模式下是基于weex的v8引擎运行,所有vue页面的js都是在同一个weex的js环境中运行。
目前weex限制一个js环境中只支持一个websocket连接,所以导致所有vue页面只能使用一个websocket连接。
临时解决方案:

  1. 回退使用非自定义组件模式(不推荐)
  2. 多个websocket在独立的nvue页面中使用

后续我们会修改weex的限制,以支持多个websocket连接

  • 大话疼 (作者)

    我没有使用nvue,都是使用的vue,这是不是很难办啊

    2019-07-19 15:52

  • lifeng_dev

    所谓自定义组件模式就是说使用了官方带的扩展组件(hello uniapp里的扩展组件)吗

    2020-01-03 09:12

  • 7***@qq.com

    一年了 还没搞好?

    2020-08-20 08:36

  • q***@126.com

    回复 7***@qq.com: 都将近两年了还没解决

    2021-06-01 18:35

  • e***@foxmail.com

    还没有解决,不由让人怀疑 uniapp 的技术力

    2021-11-02 17:12

  • 很秃然wlf

    回复 e***@foxmail.com: 现在还没有解决吗

    2021-11-04 09:59

  • DCloud_App_Array

    回复 很秃然wlf: websocket支持多个连接的,如还碰到问题请按提交Bug模板重新发帖

    2021-11-04 12:26

  • 2***@qq.com

    现在week环境的限制修复了吗

    2021-11-30 09:52

  • 1***@qq.com

    回复 DCloud_App_Array: 有冲突啊

    2021-12-07 20:35

  • Yeyou

    let id = uni.getStorageSync('useid');

    var socketOpen = false;

    var socketMsgQueue = 'login:' + id;

    let webScoket2 = wx.connectSocket({

    url: 'XXXXXXXXXXX'

    });

    // 连接成功后的回调函数

    webScoket2.onOpen(function(res) {

    let msg = socketMsgQueue;

    // 发送消息

    webScoket2.send({

    data: msg

    });

    });

    var _this = this;

    // 监听 WebSocket 接受到服务器的消息事件

    webScoket2.onMessage(function(data) {

    console.log(data);

    });

    赋值可以使用两个socket,亲测有用

    2021-12-24 14:16

3***@qq.com

3***@qq.com

遇到同样问题,忍不住登录吐槽下, 官方态度太暧昧, 文档 支持 wss和ws, ws一直出问题,wss就没问题, 自己的东西都不经过单元测试, 拿程序员当测试吗? 到现在都没解决这个问题! 还天天看到推送文章 和这个和那个比, 能不能先做好自己

大话疼

大话疼 (作者)

创建一个websocket,然后再创建第二个,前一个websocket就收不到消息,而且也没触发close,
在app端

  • aj12

    用socketTask

    2022-06-06 01:02

lifeng_dev

lifeng_dev

求官方给个稍微靠谱点的例子也行啊。。。

大话疼

大话疼 (作者)

官方赶紧看下啊

大话疼

大话疼 (作者)

官方没看到吗?

大话疼

大话疼 (作者)

这个严重的bug,都不管的吗?

回梦無痕

回梦無痕 - 暂停服务

let socketTask_A = uni.connectSocket({  
    url: 'wss://www.AAA.com',  
    complete: ()=> {}  
});  
let socketTask_B = uni.connectSocket({  
    url: 'wss://www.BBB.com',  
    complete: ()=> {}  
});  
socketTask_A.onOpen((res)=>{  
console.log(res)  
})  
socketTask_B.onOpen((res)=>{  
console.log(res)  
})

这样也不行吗?

  • 大话疼 (作者)

    我就是这样的,你这个socketTask_B执行后socketTask_A就不能用了,onmessage收不到消息,等了好长时间socketTask_A的close才执行

    2019-05-24 09:33

3***@qq.com

3***@qq.com - 90后IT男

同问,难受,官方文档里面也没有例子。

hhyang

hhyang - 如有问题,请添加QQ1606726660 备注付费咨询

为什么要创建多个?请问?一个还不够用么? 全局socket.js 试试 点我查看详细

  • wwwwt

    大佬能发给我看下吗

    2020-06-17 11:42

keledjh

keledjh

聊天列表和聊天两个页面的socket连接是混乱的,聊天的内容会发到列表页面。晕倒,不知道怎么搞。

  • 全栈

    你这个问题就不要错怪官方了,是你们后端技术水平的问题。

    2019-06-26 10:15

  • keledjh

    回复 全栈: 不是后端,后端很简单。前端的两个页面的js混在一起执行了,出现发送和接收错误。就是客户端发送数据会使用错误的连接。跟后端没有关系。兄弟,能不能帮忙看看,qq 747744636

    2019-06-26 11:24

  • keledjh

    回复 全栈: 可以登陆看下http://www.tranyo.com/h5/#/ 账号test密码111111

    2019-06-26 11:55

  • keledjh

    进入admin的聊天页面,console提示列表send就是列表页面的发送连接

    2019-06-26 11:55

  • 全栈

    从你的描述来看,是后端问题。你的打印说明不了任何问题

    2019-06-26 13:55

  • 全栈

    打印只能说明后端服务器给你发数据而已。

    2019-06-26 13:55

  • keledjh

    回复 全栈: 用socketTask 可以了 ,唯一的问题是一旦从列表进入页面,两个页面的连接会同时起作用。uni.switchTab uni.redirect 都不能销毁原来的页面。

    2019-06-26 14:57

keledjh

keledjh

var socketTask = uni.uploadFile({
url: 'wss://www.example.com/socket', //仅为示例,并非真实接口地址。
complete: ()=> {}
});
socketTask.open(); 这个示例什么意思,提示参数不对
uni.connectSocket 和task,不管怎么弄连接都是混乱的

  • DCloud_uniAD_HDX

    文档写错了,马上修正

    2019-06-26 14:47

  • DCloud_uniAD_HDX

    var socketTask = uni.connectSocket

    2019-06-26 14:53

  • 大话疼 (作者)

    回复 DCloud_uniAD_HDX: 文档还是那样啊,var socketTask = uni.connectSocket,这个是什么啊,怎么用啊

    2019-06-27 09:20

  • DCloud_uniAD_HDX

    回复 大话疼: 强制刷新页面

    2019-06-27 12:09

  • 大话疼 (作者)

    回复 DCloud_uniAD_HDX: var socketTask = uni.connectSocket({

    url: 'wss://www.example.com/socket', //仅为示例,并非真实接口地址。

    complete: ()=> {}

    });

    socketTask.open();

    我这这样用,直接报错啊

    2019-06-27 13:32

  • keledjh

    回复 大话疼: socketTask.open(); 没有这个操作,文档有误

    2019-07-02 11:02

  • keledjh

    回复 DCloud_uniAD_HDX: 没有找到强制刷新的方法,网上找到的小程序解决办法:将不需要刷新的数据放在onLoad中执行,将需要刷新的数据放在onShow中执行!这个也没有用。

    2019-07-02 11:25

  • Angels_aria

    回复 DCloud_uniAD_HDX: 你好,uniapp是不是只能用wss

    2019-07-23 15:26

keledjh

keledjh

强制刷新的方法是什么,为什么两个网页的js都常驻内存的

大话疼

大话疼 (作者)

现在都更新到2.1.1了,这个问题还没解决

大话疼

大话疼 (作者)

官方的看看啊,1.8.2版本的websocket是没问题的,往后的版本都有问题,你们就不能对比下1.8.2版本的差异吗

  • Angels_aria

    我用的ws连接的,h5和模拟器都可以运行,打包后可以发信息,就是信息不显示,必须要用wss吗

    2019-07-23 15:27

大话疼

大话疼 (作者)

官方的看看啊,1.8.2版本的websocket是没问题的,往后的版本都有问题,你们就不能对比下1.8.2版本的差异吗?
2.1.1的版本安卓的勉强能用,但是ios的根本就用不了

大话疼

大话疼 (作者)

就多个连接的问题,就是一直不解决

r***@qq.com

r***@qq.com

同样遇到了这个问题,顶一下

3***@qq.com

3***@qq.com - web前端

需要多个吗

前端小菜鸟00

前端小菜鸟00 - 一只小菜鸟

请问解决了吗

jonychen1

jonychen1

可以试试uniapp的第三方websocket框架【GoEasy】,提供完整的前后端解决方案,高并发,断网补发。

2***@qq.com

2***@qq.com

两年了,官方不看的吗

该问题目前已经被锁定, 无法添加新回复