微信小程序使用Socket的实例


Posted in Javascript onSeptember 19, 2017

微信小程序使用Socket的实例

首先,一个小程序同时只能有一个WebSocket连接,如果当前已经存在一个WebSocket连接,会关闭当前连接,并重新建立一个连接。

其次,如果使用了appID,协议必须是 wss://...

最近团队用小程序做行情,在连接socket的时候,发现在还没有进行subscribe的情况下,就直接进行了广播,并且自动关闭了socket连接,

时间紧迫,抓耳挠腮,遂引用了socket-io(基于小程序的websocket仿写的socket-io,并非官方的socket-io,传送门),使用方法:

1、先在utils文件夹粘贴一个io的js

2、然后 npm install wxapp-socket-io

3、config文件夹下新建一个socket.js,对socket连接进行封装,如下:

const io = require('../utils/io.js')
let url = 'wss://......'
let wsStatus = false
let onSocket = null
export const connect = function(cb){
  if(!onSocket){
    onSocket = io(url)
    onSocket.on('connect', function (res) {
      cb(true,onSocket)
      wsStatus = true
    })
    setTimeout(function(){
      if(!wsStatus){
        cb(false,onSocket)
      }
    },10000)
  }else{
    cb(true,onSocket)
  }
}

4、在要引用的页面调用,全局封装订阅方法

let openSocket = require('../../config/socket')
let app = getApp()
let socket = null
Page({
data: {
  zl: [[422, 400, 468, 834, 785, 446, 845, 517, 630, 797, 890, 529, 553, 425, 469, 470, 837, 841, 521, 525], [422, 400, 468, 834, 785, 446, 845, 517, 630, 797, 890, 529, 553, 425, 469, 470, 837, 841, 521, 525]]
},
onLoad: function () {
  let that = this;
  //socket调用
  openSocket.connect(function (status, ws) {
    if (status) {
      socket = ws
      this.subscribe('zl')//对封装好对订阅方法进行调用
      socket.on('broadcast', function (msg) {//广播
        console.log("broadcast");
        console.log(msg);
      })
    } else {
      alert("socket 连接失败")
    }
  });
},
subscribe: function (type) {
  if (socket) {
    let eis = this.data[type]
    if (eis && eis.length > 0) {
      let param = {//仅供参考,根据接口自行更改
        eis: eis.join(',')
      }
      socket.emit('subscribe', JSON.stringify(param));
    }
  }
}
});

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
js三种排序算法分享
Aug 16 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
Dec 11 Javascript
js 获取元素在页面上的偏移量的方法汇总
Apr 13 Javascript
JS使用eval解析JSON的注意事项分析
Nov 14 Javascript
Node.js的npm包管理器基础使用教程
May 26 Javascript
详解Angular的8个主要构造块
Jun 20 Javascript
Angular5中调用第三方js插件的方法
Feb 26 Javascript
js实现各浏览器全屏代码实例
Jul 03 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
Oct 11 Javascript
VUE中使用MUI方法
Feb 12 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
vue基于Element构建自定义树的示例代码
Sep 19 #Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
Sep 19 #Javascript
详解ES6之async+await 同步/异步方案
Sep 19 #Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 #jQuery
jquery实现倒计时小应用
Sep 19 #jQuery
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 #Javascript
jQuery实现可兼容IE6的遮罩功能详解
Sep 19 #jQuery
You might like
php读取csv数据保存到数组的方法
2015/01/03 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
python为tornado添加recaptcha验证码功能
2014/02/26 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
大一军训感言
2014/01/09 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
大班亲子运动会方案
2014/06/10 职场文书
2014年班级工作总结
2014/11/14 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
诚信高考倡议书
2019/06/24 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android