微信小程序使用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 相关文章推荐
修改发贴的编辑功能
Mar 07 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
Nov 24 Javascript
比较详细的关于javascript 解析json的代码
Dec 16 Javascript
jquery ajax提交整个表单元素的快捷办法
Mar 27 Javascript
将json对象转换为字符串的方法
Feb 20 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
Jun 07 Javascript
javascript过滤数组重复元素的实现方法
May 03 Javascript
js精确的加减乘除实例
Nov 14 Javascript
解决vue-cli + webpack 新建项目出错的问题
Mar 20 Javascript
JS实现换肤功能的方法实例详解
Jan 30 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
Aug 12 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
一个简洁的多级别论坛
2006/10/09 PHP
php Try Catch异常测试
2009/03/01 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
定义select的边框颜色
2008/04/28 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
python+Django+apache的配置方法详解
2016/06/01 Python
python3实现名片管理系统
2020/11/29 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
python实现画出e指数函数的图像
2019/11/21 Python
关于Keras Dense层整理
2020/05/21 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
土建资料员岗位职责
2014/01/04 职场文书
个人安全生产承诺书
2014/05/22 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
JS封装cavans多种滤镜组件
2022/02/15 Javascript
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python