sockettask my.connectsocket(object object)
支小宝客户端 支持
安诊儿客户端 支持
主体: 企业支付宝小程序 、 个人支付宝小程序
相关文档: 网络 api 使用须知
创建 websocket 的连接。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 兼容性 | 描述 |
---|---|---|---|---|---|
url | string | - | 是 | - | 开发者服务器 wss 接口地址。 |
data | object | - | 否 | - | 请求的参数。会将数据转换成 querystring 形式拼在 url 上 |
header | object | - | 否 | ide: 3.8.2 |
请求头 |
multiple | boolean | - | 否 | 基础库: 1.0/2.3.1 |
是否多实例。传入 true 时,api 返回 sockettask 实例。 |
protocols | array |
- | 否 | 基础库: 1.0/2.3.1 |
子协议数组。会设置请求头的 sec-websocket-protocol |
timeout | number | 30000 | 否 | 支付宝: 10.3.30 ide: 3.8.4 |
超时时间,单位 ms。 |
success | function | - | 否 | - | 调用成功的回调函数 |
fail | function | - | 否 | - | 调用失败的回调函数 |
complete | function | - | 否 | - | 调用结束的回调函数(调用成功、失败都会执行) |
sockettask
websocket 任务。 my.connectsocket 创建多实例(multiple = true)的 websocket 时会返回。
fail 回调的参数为 object,error
属性为错误码,errormessage
属性为错误消息。
错误码 | 错误消息 | 凯发app官方网站的解决方案 |
---|---|---|
2 | 接口参数无效。 |
请检查 url 是否合法。 |
3 | 该 appid,sockettaskid 对应的 websocket 已存在。 |
单实例(multiple = false)的 websocket 只能创建一次,多次创建会报此错。可先执行 my.closesocket 关闭当前 websocket,再进行下一次的创建。 |
4 | 无法识别的 url 格式。 |
替换 url 链接。 |
5 | url 必须以 ws 或者 wss 开头。 |
替换 url 链接。 |
20 | 请求 url 不支持 ws,请使用 wss。 |
请使用 wss 协议的 url。 |
my.connectsocket({
url: 'wss://hbhftgf.site/ws/', // 此 url 仅为示例,开发者可替换自己的 url
success: (res) => {
console.log("创建socket连接成功" json.stringify(res));
},
fail: (error) => {
console.error('创建连接失败: ', json.stringify(error));
},
});
my.onsocketopen(function(res) {
my.alert({ content: 'onsocketopen' json.stringify(res) });
});
my.onsocketerror(function(res) {
my.alert({ content: 'onsocketerror' json.stringify(res) });
});
my.onsocketclose(function(res) {
my.alert({ content: 'onsocketclose' json.stringify(res) });
});
const sockettask = my.connectsocket({
url: 'wss://hbhftgf.site/ws/', // 此 url 仅为示例,开发者可替换自己的 url
multiple: true, // multiple 为 true 则会返回 sockettask
success: (res) => {
console.log("connectsocket1 成功" json.stringify(res));
},
fail: (res) => {
console.log("connectsocket1 失败" json.stringify(res));
},
});
sockettask.onopen(function(res) {
console.log("sockettask1.onopen" json.stringify(res));
});
sockettask.onclose(function(res) {
console.log("sockettask1.onclose" json.stringify(res));
});
sockettask.onerror(function(res) {
console.log("sockettask1.onerror" json.stringify(res));
});
sockettask.onmessage(function(res) {
console.log("sockettask1.onmessage" json.stringify(res));
});
-
tip当创建单实例(multiple = false)的 websocket 时, my.onsocketopen 等接口才会生效,多实例不生效。
-
tip多实例(multiple = true)的 websocket 才会返回 sockettask,单实例不会返回。
-
tip多实例最多能创建 5 条 websocket 通道。
-
tip如需使用 http 的 basic auth,请按标准构造
authorize
请求头作为入参 header 字段传入,而不要将用户名和密码放进 url(即不要使用wss://{username}:{password}@example.com
这样的 url),否则会有兼容性问题(android 上不支持,ios 未来也会取消支持)。 -
bugios 上此接口会在 url 中不包含用户名和密码的情况下也构造出 authorize 字段放到请求头里。这可能会导致部分服务器报错或拒绝连接。如果遇到 android 能够连接而 ios 不能的情况,可尝试向 header 中显式传入 authorize: '' 来规避这个问题
-
bug安卓端 10.5.6 以前,当页面调用 my.relaunch、my.redirectto 或 my.switchtab 后,onsocketmessage 事件会失效。此缺陷已在 10.5.6 版本解决
q:my.connectsocket 是否支持 mqtt 协议
my.connectsocket 支持 mqtt 协议,但是需要注意的是,若为 mqtt 协议,则需要注意在 header 参数里,加上 「 sec-websocket-protocol : 'mqtt' 」
参考代码:
my.connectsocket({
url: 'wss://hbhftgf.site/ws/', // 此 url 仅为示例,开发者可替换为自己的 url
//mqtt 协议服务需要加上这个header
header : {
"sec-websocket-protocol" : "mqtt"
},
success: (res) => {
console.log("创建 socket 连接成功" json.stringify(res));
},
fail: (error) => {
my.alert({ content: '创建连接失败:' json.stringify(error) });
},
});