你想了解微信小程序中 `wx.onSocketOpen` 事件的具体使用方法,包括它的作用、调用方式和注意事项。
### `wx.onSocketOpen` 的核心使用方法
#### 1. 核心概念与作用
`wx.onSocketOpen` 是微信小程序提供的**WebSocket 连接打开事件监听器**,用于监听 `wx.connectSocket` 发起的连接成功建立的时刻。只有当该事件触发后,WebSocket 连接才真正可用,此时才能通过 `wx.sendSocketMessage` 发送消息。
#### 2. 基本语法
```javascript
wx.onSocketOpen(callback(res))
```
- **参数**:`callback(res)` 是连接成功时的回调函数
- **回调参数 `res`**:一个对象,包含连接成功的相关信息(目前主要包含 `isConnected: true` 标识)
#### 3. 正确使用步骤
`wx.onSocketOpen` 必须在 `wx.connectSocket` 之后调用(或同时),因为连接建立是异步过程,需提前监听才能捕获成功事件。
#### 4. 完整使用示例
```javascript
// 1. 发起 WebSocket 连接请求
wx.connectSocket({
url: 'wss://your-server.com/ws', // 后端 WebSocket 服务地址
header: {
'token': 'user-token-123' // 自定义请求头
}
});
// 2. 监听连接成功事件(关键)
wx.onSocketOpen((res) => {
console.log('WebSocket 连接已成功打开', res);
console.log('连接状态:', res.isConnected); // 输出 true
// 连接成功后,才能发送消息
wx.sendSocketMessage({
data: JSON.stringify({
type: 'init',
content: '小程序已连接'
}),
success: () => {
console.log('消息发送成功');
},
fail: (err) => {
console.error('消息发送失败', err);
}
});
});
// 3. 搭配其他事件监听(完整流程)
wx.onSocketError((err) => {
console.error('WebSocket 连接失败', err);
});
wx.onSocketClose((res) => {
console.log('WebSocket 连接已关闭', res);
});
```
#### 5. 关键注意事项
- **调用时机**:需在 `wx.connectSocket` 之后调用,若先调用 `wx.connectSocket` 再监听,可能错过事件(建议同时调用)。
- **多次监听**:若多次调用 `wx.onSocketOpen`,会添加多个回调函数,触发时依次执行(如需移除,可使用 `wx.offSocketOpen`)。
- **作用域**:回调函数内的 `this` 指向全局,若需访问页面实例,需提前保存 `this` 或使用箭头函数。
- **连接状态**:仅当 `onSocketOpen` 触发后,`wx.sendSocketMessage` 才能正常使用,否则会报错。
### 总结
1. `wx.onSocketOpen` 用于监听 WebSocket 连接成功事件,是发送消息的前提。
2. 需在 `wx.connectSocket` 之后调用,回调函数中可执行消息发送等后续操作。
3. 需搭配 `wx.onSocketError`/`wx.onSocketClose` 监听异常和关闭事件,保证流程完整性。
下一篇:setData性能问题如何优化