微信小程序使用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即时通讯 ...
随机推荐
- 粒子群算法-PSO
粒子群优化算法 1. 背景知识 1995年美国社会心理学家Kennedy和电气工程师Eberhart共同提出粒子群优化算法(Particle Swarm Optimization, PSO).PSO算 ...
- 筛选(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 [视图]选项卡下有个[筛选器],筛选功能就在里面实现. 比如按[里程碑]筛选. 按[日期范围],再指定个起始日期和结束日期 ...
- 【嵌入式AI】全志 XR806 OpenHarmony 鸿蒙系统固件烧录
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本教程详细记录了 ...
- Spring学习(四)在Web项目中实例化IOC容器
1.前言 前面我们讲到Spring在普通JAVA项目中的一些使用.本文将介绍在普通的Web项目中如何实例化Spring IOC容器.按照一般的思路.如果在Web中实例化Ioc容器.这不得获取Conte ...
- docker启动redis报错 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
docker启动redis报错 1:C 17 Jun 08:18:04.613 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo1:C 17 Jun 08 ...
- JAVA字符串拼接操作规则说明
1.常量与常量的拼接结果在常量池,原理是编译期优化 public void test1() { String s1 = "a" + "b" + "c& ...
- c++之面试题(1)
题目 有十瓶药,每瓶里都装有100片药,其中有八瓶里的药每片重10克,另有两瓶里的药每片重9克.用一个蛮精确的小秤,只称一次,如何找出份量较轻的那两个药瓶? 解法 1.分别给10个药瓶按照斐波那契数列 ...
- 【LeetCode】139. Word Break 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- WPF中的StaticResource和DynamicResource有什么区别
StaticResource 是静态资源 DynamicResource是动态资源 用一下例子说明 <Window.Resources> <Style x:Key="Bor ...
- 前端项目 node8升级到node16,代码升级汇总
背景 公司的项目是vue项目,环境是node@8x版本的,最近我创建react hook的项目,发现至少需要node14才支持,打开官网才发现node都已经到16版本了.失策啊,失策.于是直接升级到最 ...