更新记录

0.0.5(2021-12-22)

  1. 调整了文档中新版的构造函数说明,必须要添加url或options(同官方)

0.0.4(2021-12-22)

  1. websocket的构造函数不再集成url,需要用户提供,使用更加方便

0.0.3(2021-11-04)

  1. 优化send方法的处理,当连接成功时直接发送,若未成功则等待连接成功再发送
查看更多

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.1.0 app-vue × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
×

wxy-lib 介绍

原创和收集优秀的js提供给项目使用

封装类

1、websocket

来源

websocket是支持H5,APP和小程序,可惜官方文档还是Hello示例中都只是浅尝辄止介绍下,对于我来说存在以下疑惑:

  • uni.connectSocket创建多个连接时如何覆盖的?
  • socketTask多连接是怎么使用?
  • 在renderjs中如何使用websocket?还支持uni官方的API?

为了解答上面的疑惑,对uni官方的websocket api和html5的websocket进行了测试,得出以下结论:

目前uniapp官方提供了两种方式,一种是以uni开头的,暂称为WebSocket方式,另一种是SocketTask,类似于Html5中WebSocket,暂称为SocketTask方式

  1. WebSocket方式只支持一个连接,更换另一个时必须要先调用关闭后再连接,否则新的连接不生效
  2. SocketTask支持多个连接,相互之间独立,用法类似于Html5中WebSocket
  3. 两种方式在发送数据前都要确认连接是成功的,否则将报错,因为二者实质都是Promise返回
  4. renderjs中,上面uniapp官方的websocket的API无效,只能使用原生WebSocket,而且是支持多连接的

封装的想法来源于colorUI-IMyiqun 打造跨平台即时通讯软件,但二者的socket的封装关联太多,什么帐号登录啊,什么服务客户连接啊 感觉考虑太多,反而把websocket封装的独立性破坏了,我的目标就是封装一个websocket库,自动识别环境,在逻辑层时使用uniapp官方的websocket,在视图层renderjs时使用Html5的WebSocket,默认是多连接的,可以自定义

使用

文件说明:

  1. wxy-lib/plugins/websocket.js是源文件
  2. wxy-lib/plugins/websocket.min.js是压缩文件,压缩工具是UglifyJS,命令是uglifyjs websocket.js -m -c -o websocket.min.js(移除, 压缩后条件编译无效)
  3. 默认库文件引用了项目下/config/base.js的配置文件,自己可填加,若自己修改源码再压缩

使用案例:

在逻辑层中使用时:

  1. 在main.js中import socket from './uni_modules/wxy-lib/plugins/websocket.js'
  2. 加入全局变量:
    • vue2时:Vue.prototype.$socket=new socket(url);
    • vue3时:app.config.globalProperties.$socket=new socket(url);
  3. this.$socket.send(message); 调用方法有send发送消息,message接收消息,close关闭消息,sync同步消息

在视图层中使用时:

  1. import Socket from '../../uni_modules/wxy-lib/plugins/websocket.js';
  2. let socket=new Socket(url);
  3. socket.send(message);

这里顺便说下renderjs的注意事项:

  • 封装的代码在renderjs中运行时切记不能用新的语法,估计只支持ES2016语法,后面都不支持,如可选链(?.)或空值合并运算符(??),否则报错

    [1635755742168][0ms][renderjs]:"431a0485 not found" at uni-app-view.umd.js:2
    Uncaught SyntaxError: Unexpected token . at app-renderjs.js:128
  • this.$ownerInstance.callMethod调用逻辑层方法时要求Vue是2,不能是3,否则报callMethod未定义错误,尽管我的项目是支持Vue3的

  • Vue2版支持renderjs全面,Vue3不全面支持renderjs,如callMethod不支持,示例代码在Vue2正常,在Vue3提醒callMethod未定义

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问