npm package: @i5920/uni-socket-promise
Description: uniapp框架websocket和promise结合版
Author: OkCoder
Latest version: 2.0.16
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

### uni-socket-promise

#### 使用范围

仅支持uniapp

#### 安装
```
npm i @i5920/uni-socket-promise -S
```

#### 亮点
- promise异步获取结果
- 断线重连
- 心跳
- 断线消息队列
- debug
- 支持typescript

#### 使用说明
- App.vue
```
import UniSocketPromise from "@i5920/uni-socket-promise"
export default {
  globalData:{
    socket:null
  },
  onLaunch() {
    this.globalData.socket = new UniSocketPromise({
        url: "ws://127.0.0.1:8080"
    });
  },
  // 必须在这里调用initSocket方法
  onShow() {
    // 连接socket
    this.globalData.socket.initSocket();
    // 登录
    this.loginDemo();
  },
  methods:{
    // 发送socket消息
    loginDemo(){
      this.globalData.socket.send("login",{
          "username":"okcoder",
          "password":"666666"
      },{
        'token':"12345"
      }).then(_=>{
          console.warn(_)
      });
    },
    // 主动关闭socket
    closeSocket(){
      this.globalData.socket.close();
    }
  }
}
```

- 其它页面
```
getApp().globalData.socket.send("事件名称",{
    "username":"okcoder",
    "password":"666666"
}).then(_=>{
    console.warn(_)
});
```

- 后端格式要求

```
{
    event:"标识",   // 要求根据前端发送的数据进行组合加密 -> md5(事件名称字符串+参数字符串)
    data:"数据"
}
```

#### 方法说明
- initSocket(success, fail)
  - 初始化websocket
  - 判断websocket是否连接
  - 参数
    1. success 连接成功,如果是第一次则open可能还没有打开
    2. fail 连接失败


- send(event,data,extraData)
  - 发送socket消息
  - 参数
    1. event:string         事件名称
    2. data?:object         请求参数，必须json对象或者空对象{}或者不传值
    3. extraData?:object    同级参数


- close({code,reason,success,fail,complete})
  - 主动关闭socket
  - 参数(对象)
    1. code?: number
    2. reason?: string
    3. success?: Function
    4. fail?: Function
    5. complete?: Function

- 如果发送其它格式的消息直接使用`uni.sendSocketMessage()`

#### 参数说明
| 参数 | 类型 | 必填 | 默认值 | 说明 |
| ---- | ---- | ---- | ---- |---- |
| url | string | 是 |-| websocket地址,如`ws://127.0.0.1:8080` |
|debug| boolean|否| 开发环境自动打开 | 调试开关 |
|header| object|否| - | 参考https://uniapp.dcloud.io/api/request/websocket?id=connectsocket|
|method| string|否| - | 参考https://uniapp.dcloud.io/api/request/websocket?id=connectsocket|
|protocols| string[]|否| - | 参考https://uniapp.dcloud.io/api/request/websocket?id=connectsocket|
|isReconnect|boolean|否|true|是否断线重连|
|reConnectTime|number|否|3000|断线重连间隔时间,毫秒|
|isHeartData|boolean|否|true|是否发送心跳|
|heartTime|number|否|3000|心跳包间隔事件,毫秒|

| 回调方法 | 参数 | 说明 |
| ---- | ---- | ---- |---- |
|onSocketOpen|callback(header)|监听到socket打开事件|
|onSocketClose|callback(res)|监听到socket被关闭事件|
|onSocketError|callback(res)|监听到socket出错事件|
|onSendMessageBefore|callback(message)|发送消息前事件,必须返回{event:"",data:''},因为要继续下面的逻辑|
|onSendMessageAfter|callback(message)|发送消息后事件|
|onSocketMessageBefore|callback(data)|收到消息前事件,如果返回true则继续逻辑,返回false则终止逻辑,千万注意如果要继续逻辑必须返回true|
|onSocketMessageAfter|callback(data,pool)|data为接收到的数据,pool为当前线程池,含promise方法|

#### 赞助二维码

![](https://gitee.com/uploads/images/2018/0623/112959_9f84f1f7_696921.png "3.png")
![](https://gitee.com/uploads/images/2018/0623/113008_0014aa83_696921.jpeg "4.jpg")

#### 更新日志

- v2.0.16
  1. [优化]onSocketMessageAfter方法回调优化

- v2.0.14

  1. [修复]在app端第一次接收到数据后无法再次接收的问题

- v2.0.13

  1. [新增]网络检测 注意：由于官方bug,iOS网络检测有问题
  2. [优化]逻辑优化

- v2.0.12

  1. [优化]send方法 data参数必须是json对象或者空对象{}或者不传值,默认发送空字符,方便后端解析与md5加密统一

- v2.0.9

  1. [bug]utility插件不给力,改为md5-ts

- v2.0.8

  1. [bug]Pool使用完后立马删除

- v2.0.7

  1. [bug]send方法添加同级请求参数

- v2.0.6

  1. [优化]send方法添加同级请求参数

- v2.0.5

  1. [优化]onSocketMessageBefore如果返回true可继续逻辑,返回false则终止逻辑