微信小程序使用Websocket
/**
初始化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的更多相关文章
- 微信小程序之WebSocket
本文版权归 OSChina jsongo0 所有,转载请标明出处,以示尊重! 原文:https://my.oschina.net/jsongo/blog/757871 为什么需要websocket?传 ...
- 微信小程序开发——websocket测试
服务端 在windows下执行 node server.js 也可参照我的前一篇部署https var httpServ = require('http') var WebSocketServer ...
- 基于vs2015 SignalR开发的微信小程序使用websocket实现聊天功能
一)前言 在微信小程上实现聊天功能,大致有三种方式:1)小程序云开发 2)购买第三方IM服务 3)使用自己的服务器自己开发. 这里重要讲使用自己的服务器自己开发,并且是基于vs的开发. 网上提供的解决 ...
- 微信小程序 实现websocket长连接 以及断开连接之后自动重连
app.js let socketMsgQueue = [] let isLoading = false App({ globalData: { userInfo: null, localSocket ...
- 微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
目录 0.概述websocket 1.app.js写法 2.后台写法 0.概述websocket (1) 个人总结:后台设置了websocket地址,服务器开启后等待有人去连接它. 一个客户端一打开就 ...
- 微信小程序中如何使用WebSocket实现长连接(含完整源码)
本文由腾讯云技术团队原创,感谢作者的分享. 1.前言 微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的框架.组件以及 API,在这个平台上面的想象空间很大.腾讯云研究了一番之后,发现 ...
- 微信小程序websocket
微信小程序websocket 微信小程序带有websocket可以提供使用,但是官方文档写的东西很少,而且小程序后台能力弱这一点也是十分的坑爹,这就导致了socket长连接一切后台就会出现断开的情况, ...
- 微信小程序 WebSocket 使用非 443 端口连接
前言 微信小程序支持使用 WebSocket 连接到服务器,准确地说是带 SSL 的 WebSocket,而微信小程序中不允许使用带端口的 wss 连接,只能使用 443 端口.想使用其他端口就需要在 ...
- 前端笔记之微信小程序(四)WebSocket&Socket.io&摇一摇案例&地图|地理位置
一.WebSocket概述 http://www.ruanyifeng.com/blog/2017/05/websocket.html Workerman一款开源高性能异步PHP socket即时通讯 ...
随机推荐
- 转:UITableView学习笔记
UITableView学习笔记 作者:一片枫叶 看TableView的资料其实已经蛮久了,一直想写点儿东西,却总是因为各种原因拖延,今天晚上有时间静下心来记录一些最近学习的 TableV ...
- [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun
[WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...
- 删除其他列Table.SelectColumns(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- 一站式云原生在线研发平台 StarOS 种子用户邀请计划正式开启!
云时代的开发者,你好: 你是否也曾畅想过,关于云的未来? 不是作为消费者,也不是作为企业,是对于开发者而言,云会变成什么样. 同为开发者,我们常在想,我们开发了一个又一个应用,让太多人因服务在线而获益 ...
- 由一次 UPDATE 过慢 SQL 优化而总结出的经验
最近,线上的 ETL 数据归档 SQL 发生了点问题,有一个 UPDATE SQL 跑了两天还没跑出来: update t_order_record set archive_id = '420a7fe ...
- 【PS算法理论探讨二】 Photoshop中图层样式之 投影样式 算法原理初探讨。
接下来几篇文章我们将稍微简单的探索下PS中多种图层混合模式的算法内部原理,因为毕竟没有这方面的官方资料,所以很多方面也只是本人自己的探索和实践,有可能和实际的情况有着较大的差异. 在PS的实践中,图层 ...
- SpringBoot使用Aspect切面拦截打印请求参数
引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- JAVA匹配html中所有img标签
public static List<String> getImg(String htmlStr) { List<String> list = new ArrayList< ...
- JS动态加载JS文件
有时候我们要根据场景加载不同的js文件,比如PC站加载某个文件,手机站不加载 <script> if ((navigator.userAgent.match(/(iPhone|iPod|A ...
- 【LeetCode】198. House Robber 打家劫舍 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 递归 + 记忆化 动态规划 优化动态规划空间 ...