/**

初始化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. useEffect无限调用问题

    1.useEfect()的基本用法 const [test,setTest] = useState(1) const init=()=>{ setTest(2) } useEffect(()=& ...

  2. ciscn_2019_s_9

    很简单的一道题 例行检查 没有开启nx保护,就想到了shellcode来做 很明显的栈溢出 唯一的要求就是shellcode长度不能超过0x24 通过jump跳转到shellcode的位置 完整exp ...

  3. [BUUCTF]REVERSE——简单注册器

    简单注册器 附件 步骤: apk文件,直接用apkide打开 去找反编译后的文件,反编译后的语言并没有看大懂,网上百度后找到了一个反编的神器jeb,下载地址 用它反编译后按tab,就能看懂代码了,搜索 ...

  4. Table.RenameColumns重命名…Rename…(Power Query 之 M 语言)

    数据源: "姓名""基数"等列 目标: 修改"姓名"列标题为"员工姓名" 操作过程: [转换]>[重命名]> ...

  5. CF950A Left-handers, Right-handers and Ambidexters 题解

    Content 有 \(l\) 个人是左撇子,有 \(r\) 个人是右撇子,另外有 \(a\) 个人既惯用左手又惯用右手.现在想组成一个队伍,要求队伍中惯用左手的人和惯用右手的人相等,试求出团队里面的 ...

  6. java 数据类型String 【正则表达式】匹配工具 Pattern和Matcher

    Pattern和Matcher的介绍: Pattern对象是正则表达式编译后在内存中的表示形式,因此正则表达式宇符串必须先被编译为Pattern对象,然后再用该Pattern对象创建对应的Matche ...

  7. 云主机tracert外网无返回需在安全组入方向加ICMP Time Exceeded TTLexpired in transit

  8. Spring Boot新增一个YML配置文件,并进行加载

    我们在同级目录下增加 然后增加一个配置类 SpringBootConfiguration.java import org.springframework.beans.factory.config.Ya ...

  9. Spring Boot去掉浏览器默认的叶子图标

    在Spring Boot的配置文件application.properites中添加配置项,可以关闭默认的Favicon spring.mvc.favicon.enabled=false

  10. Dapr项目应用探索

    背景介绍 前面文章对Dapr的基本信息进行了学习,接下来尝试将Dapr应用相关应用中. 接下来一步步实现应用dapr功能. 一.预期效果 如上图应用Dapr点包含: a) 报表服务绑定统一数据源服务: ...