使用SocketTask,弃用wx

经验总结

微信小程序websocket的注意事项:使用SocketTask,弃用wx
在这里插入图片描述
在这里插入图片描述

示例代码

socketTask的示例代码如下
引用在微信小程序的一个页面中开启多个websocket连接的代码

var ws1 = wx.connectSocket({//打开websocket连接
	url: 'wss://test.com/ws1',
	success: function (resConnect) {//打开连接成功
		// console.log(resConnect)

	},
	fail: function (resConnectError) {//打开连接失败
		// console.log(resConnectError)
	}
})
ws1.onOpen(function (res) {
	if (ws1.readyState === 1) {
		ws1.send({
			data: JSON.stringify({
				number: '123',
			}),
			success: function (resSend) {
				// console.log(resSend)

			},
			fail: function (resSendError) {
				// console.log(resSendError)
			}
		})
	}
})

ws1.onMessage(function (data) {
	console.log(data.data)
})

var ws2 = wx.connectSocket({//打开websocket连接
	url: 'wss://test.com/ws2',
	success: function (resConnect) {//打开连接成功
		// console.log(resConnect)

	},
	fail: function (resConnectError) {//打开连接失败
		// console.log(resConnectError)
	}
})
ws2.onOpen(function (res) {
	if (ws2.readyState === 1) {
		ws2.send({
			data: JSON.stringify({
				number: '234',
			}),
			success: function (resSend) {
				// console.log(resSend)

			},
			fail: function (resSendError) {
				// console.log(resSendError)
			}
		})
	}
})

ws2.onMessage(function (data) {
	console.log(data.data)
})

问题来源

最近工作上有分析与解决了一个微信小程序websocket连接异常的问题,所有就有了这篇总结分享,供小伙伴参考
当时的情况是这样的,某业务方引用了公司平台的两个SDK(SDK-A, SDK-B),两个SDK都有使用了websocket连接,如果先初始化SDK-A,再初始化SDK-B,两个SDK都能正常工作。但如果先初始化SDK-B,再初始化SDK-A,大概率会导致两个SDK的websocket连接异常,SDK-A的websocket使终连接不上,SDK-B的websocket的连接会频繁断开与重连(连接不稳定但或可以正常跟服务器交互一段时间)PS:由于没有SDK-B的代码权限,同时SDK-A的代码自己不熟悉,所以只能通过对比正常情况的日志输出与异常情况的日志输去分析了
在分析此类问题上,我们要注意一个点是日志输出是否充够,一个SDK的日志输出都是有级别控制的,所以我们在优先设置好日志输出的级别,尽可能多的输出日志于。另外在分析微信小程序或web端的网络问题dev_tool工具(inspector)中的Network功能要会使用
在这里插入图片描述
在查看日志以及关键代码的排查了,最终是确定SDK-A的websocket使用了wx实例去操作websocket,而不是使用socketTask
所以就算微信小程序APP本身算依赖的SDK都使用了socketTask,但APP的业务逻辑层是使用wx实例去操作websocket的话,会也大概率导致所有的websocket不能正常工作!

关键的日志截图!!(异常时SDK-A也收到了SDK-B的消息,)
说明:

  1. SDK-A使用了,wx.onSocketMessage(function callback)
  2. 下面的URI是自定义的协议包的ID
    在这里插入图片描述
    另外,当现现如上异常后,SDK-A的websocket连接连协议心跳包都没有发出去过!!!
    在这里插入图片描述
// 如果进行typescript的话,成员变量socketTask可以声名为any
	private socketTask: any = null;

参考文章

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值