# WebSocket-微信小程序

> 需要注意，使用此能力需要小程序基础库版本最低为 `2.21.1`

备注意：在 iOS 高性能+ 模式下，`connectContainer` 暂时无法携带微信身份（即服务端无法读取到 `x-wx-openid`）。

## 能力使用

在小程序中使用如下的代码：

```js
const { socketTask } = await wx.cloud.connectContainer({
  config: {
    env: 'wxrun-demo', // 替换自己的微信云托管的环境ID
  },
  service: 'ws', // 替换自己的服务名
  path: '/' // 不填默认根目录
})
```

## 请求参数

`wx.cloud.connectContainer` 参数：

| 属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
| ---- | ---- | ------ | -------- | ---- | -------- |
| config.env | string |  | 是 | 云环境 ID | 2.21.1 |
| service | string |  | 是 | 服务名 | 2.21.1 |
| path | string |  | 是 | 开发者服务器接口地址 | 2.21.1 |
| success | function | - | 否 | 接口调用成功的回调函数 | 2.21.1 |
| fail | function | - | 否 | 接口调用失败的回调函数 | 2.21.1 |
| complete | function | - | 否 | 接口调用结束的回调函数（调用成功、失败都会执行） | 2.21.1 |

> 如果希望 wx.cloud.container 返回 Promise，请勿传 `success`、`fail` 和 `complete`

## 返回值

`connectContainer` Promise resolve 的结果 / success 回调的结果是如下对象，包含用于收发消息和管理链接的 `socketTask` 属性：

| 属性 | 类型 | 说明 | 最低版本 |
| ---- | ---- | ------ | -------- |
| socketTask | [SocketTask](/miniprogram/dev/api/network/websocket/SocketTask.md) | socket 对象，和 [wx.connectSocket](/miniprogram/dev/api/network/websocket/wx.connectSocket.md) 返回值一样 |  |

## 代码示例

在小程序 `app.js` 文件中替换如下代码：

``` js
App({
  onLaunch: async function () {
    wx.cloud.init({
      traceUser: true
    })
    const { socketTask } =  await wx.cloud.connectContainer({
      config: {
        env: 'wxrun-demo',  // 微信云托管的环境ID
      },
      service: 'ws',        // 服务名
      path: '/'             // 不填默认根目录
    })
    socketTask.onMessage(function (res) {
      console.log('【WEBSOCKET】', res.data)
    })
    socketTask.onOpen(function (res) {
      console.log('【WEBSOCKET】', '链接成功！')
      socketTask.send({
        data: '这是小程序消息'
      })
    })
    socketTask.onClose(function (res) {
      console.log('【WEBSOCKET】链接关闭！')
    })
  }
})
```
