/**

初始化websocket

stomp文档 http://jmesnil.net/stomp-websocket/doc/
*/
initSocket: function () {
var that = this;
// socket是否连接
var socketConnected = false;
// 待发送的消息队列
var messageQueue = [];
// 是否断线重连
var reconnect = true;
// 断线重连次数
var reconnectnum = 0;

// 发送消息
function sendSocketMessage(msg) {
// 如果socket已连接则发送消息
if (socketConnected) {
wx.sendSocketMessage({
data: msg
})
} else {
// socket没有连接将消息放入队列中
messageQueue.push(msg);
}
}

// 关闭连接
function close() {
if (socketConnected) {
wx.closeSocket()
}
}

// 符合WebSocket定义的对象
var ws = {
send: sendSocketMessage,
close: close
}

// 创建一个 WebSocket 连接
//api.RTCWSSHOST_URL,你的wss链接
//token ;与服务端定义的参数
function connect() {
var token = “token=” + wx.getStorageSync(‘clienttoken’)
wx.connectSocket({
url: api.RTCWSSHOST_URL + ‘?token=’ + wx.getStorageSync(‘clienttoken’),
})
}
connect();

// 监听 WebSocket 连接打开事件
wx.onSocketOpen(function (res) {
console.log(“WebSocket 连接成功”)
socketConnected = true;
ws.onopen();
// 连接成功后,将队列中的消息发送出去
// let queueLength = messageQueue.length
// for (let i = 0; i < queueLength; i++) {
// const messageQueueElement = messageQueue.shift();
// wx.sendSocketMessage({
// data: messageQueueElement
// })
// }
})

// 监听 WebSocket 接受到服务器的消息事件
wx.onSocketMessage(function (res) {
ws.onmessage(res);
})

// 监听 WebSocket 错误事件
wx.onSocketError(function (res) {
console.log(“WebSocket 错误事件”)
})

// 监听 WebSocket 连接关闭事件
wx.onSocketClose(function (res) {
console.log(“WebSocket 连接关闭”)
socketConnected = false;
// 断线重连
//断线重连3次后,30分钟之后重连
if (reconnect) {
console.log(“断线重连***************”)
if(reconnectnum>3){
setTimeout(function(){
reconnectnum = 0;
client.disconnect();
that.connect();
},1800000);
}else{
reconnectnum +=1;
connect();
}
}
})

var Stomp = require(‘utils/stomp.min.js’).Stomp;

/**

定期发送心跳或检测服务器心跳
The heart-beating is using window.setInterval() to regularly send heart-beats and/or check server heart-beats.
可看stomp.js的源码(195,207,489行),由于小程序没有window对象,所以我们要调用小程序的定时器api实现
*/
Stomp.setInterval = function (interval, f) {
return setInterval(f, interval);
};
// 结束定时器的循环调用
Stomp.clearInterval = function (id) {
return clearInterval(id);
};
var stompClient = Stomp.over(ws);

//{“clienttype”:“小程序”} ;与服务端定义的标识
stompClient.connect({“clienttype”:“小程序”}, function (callback) {
//全局都可以使用stompClient
that.globalData.client = stompClient;
// 主题订阅
stompClient.subscribe(’/app/public’, function (body, headers) {
console.log(‘主题订阅收到群发消息’, body);
wx.setStorageSync(‘clientdata’, body);
//需求,每个18秒把推送过来 的消息情况
if (subscribeTimeFun) {
clearTimeout(subscribeTimeFun);
}
subscribeTimeFun = setTimeout(function () {
wx.setStorageSync(‘clientdata’, “”);
}, 18000);
});

// // 订阅自己的
// stompClient.subscribe('/user/' + openid + '/message', function(message, headers) {
// wx.vibrateLong()
// console.log('收到只发送给我的消息:', message);
// // 通知服务端收到消息
// message.ack();
// });
//
// // 向服务端发送消息
// stompClient.send("/app/message", {}, JSON.stringify({
// 'msg': '我是客户端'
// }));

})

},

微信小程序使用Websocket的更多相关文章

  1. 微信小程序之WebSocket

    本文版权归 OSChina jsongo0 所有,转载请标明出处,以示尊重! 原文:https://my.oschina.net/jsongo/blog/757871 为什么需要websocket?传 ...

  2. 微信小程序开发——websocket测试

    服务端 在windows下执行 node  server.js 也可参照我的前一篇部署https var httpServ = require('http') var WebSocketServer ...

  3. 基于vs2015 SignalR开发的微信小程序使用websocket实现聊天功能

    一)前言 在微信小程上实现聊天功能,大致有三种方式:1)小程序云开发 2)购买第三方IM服务 3)使用自己的服务器自己开发. 这里重要讲使用自己的服务器自己开发,并且是基于vs的开发. 网上提供的解决 ...

  4. 微信小程序 实现websocket长连接 以及断开连接之后自动重连

    app.js let socketMsgQueue = [] let isLoading = false App({ globalData: { userInfo: null, localSocket ...

  5. 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用

    目录 0.概述websocket 1.app.js写法 2.后台写法 0.概述websocket (1) 个人总结:后台设置了websocket地址,服务器开启后等待有人去连接它. 一个客户端一打开就 ...

  6. 微信小程序中如何使用WebSocket实现长连接(含完整源码)

    本文由腾讯云技术团队原创,感谢作者的分享. 1.前言   微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的框架.组件以及 API,在这个平台上面的想象空间很大.腾讯云研究了一番之后,发现 ...

  7. 微信小程序websocket

    微信小程序websocket 微信小程序带有websocket可以提供使用,但是官方文档写的东西很少,而且小程序后台能力弱这一点也是十分的坑爹,这就导致了socket长连接一切后台就会出现断开的情况, ...

  8. 微信小程序 WebSocket 使用非 443 端口连接

    前言 微信小程序支持使用 WebSocket 连接到服务器,准确地说是带 SSL 的 WebSocket,而微信小程序中不允许使用带端口的 wss 连接,只能使用 443 端口.想使用其他端口就需要在 ...

  9. 前端笔记之微信小程序(四)WebSocket&Socket.io&摇一摇案例&地图|地理位置

    一.WebSocket概述 http://www.ruanyifeng.com/blog/2017/05/websocket.html Workerman一款开源高性能异步PHP socket即时通讯 ...

随机推荐

  1. antd动态的表格合并(包含排序功能)

    主要是两个步骤, 1.处理接口返回数据,给其添加两个属性,一个是合并行数(列数),一个是当前数据的序号 2.在columns结合antd官网的处理方法合并表格 3.尽可能得减少计算量 数据处理函数 / ...

  2. 人工水母搜索算法--JS

    1. 人工水母算法原理背景 水母生活在世界上不同深度和温度的水中.它们酷似钟状,一些水母的直径小于1cm,然有些水母直径则非常大.它们有各种各样的颜色.大小和形状.大多数水母偏好海洋环境.它们进食的方 ...

  3. YonBuilder低代码开发实践:4行代码实现跨实体列表数据同步

    提到增.删.改.查等数据维护,后端开发者们再熟悉不过了.传统的数据维护通过操作数据库的方式实现,步骤比较繁琐,需要通过Java代码实现数据库链接,然后编写SQL语句.编写实体,将想要的数据存到相应的数 ...

  4. Python 的切片为什么不会索引越界?

    切片(slice)是 Python 中一种很有特色的特性,在正式开始之前,我们先来复习一下关于切片的知识吧. 切片主要用于序列对象中,按照索引区间截取出一段索引的内容. 切片的书写形式:[i : i+ ...

  5. 在eclipse打开jsp文件变成文本的解决:

    在eclipse打开jsp文件变成文本的解决: ------原因:可能是不小心删除某些组件等等一些操作 1,考虑一下是否还有插件jsp 编辑器组件 选择内部编辑器[在下面选择 JSP Editor]- ...

  6. CF80B Depression 题解

    Content 有一个时针,给定时间为 \(\text{HH}\) 时 \(\text{MM}\) 分,求图中 \(\alpha\) 和 \(\beta\) 角的值. 手画勿喷/kk 数据范围:\(0 ...

  7. CF1454A Special Permutation 题解

    Content 给定一个整数 \(n\),请构造出一个长度为 \(n\) 的排列 \(\{a_i\}_{i=1}^n\),使得对于每个 \(a_i\),都有 \(a_i\neq i\). 我们称一个长 ...

  8. java 数据类型String 【正则表达式】匹配

    1,什么是正则表达式 正则表达式是用来处理字符串的,其实正则表达式是非常复杂的,专门去系统学习需要花很长的时间,我们课程主要就是把常用的基础的给大家讲解. 正则表达式可以用来干什么: (1),匹配字符 ...

  9. 【九度OJ】题目1433:FatMouse 解题报告

    [九度OJ]题目1433:FatMouse 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1433 题目描述: FatMouse pr ...

  10. 【九度OJ】题目1179:阶乘 解题报告

    [九度OJ]题目1179:阶乘 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1179 题目描述: 输入n, 求y1=1!+3!+-m ...