| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- // 域名地址(项目实地址)
- const Host = 'ws://id27149.com:2222/codec'; //codecserver网站
-
- // Socket连接成功
- var socketOpen = false;
- // Socket关闭
- var socketClose = false;
- // 消息队列
- var socketMsgQueue = [];
-
- // 判断心跳变量
- var heart = null;
- // 心跳失败次数
- var heartBeatFailCount = 0;
- // 终止心跳
- var heartBeatTimeout = null;
- // 终止重连
- var connectSocketTimeout = null;
-
- var webSocket = {
- // 连接Socket
- connectSocket:function(sever_url, success_cb, fail_cb) {
- wx.showLoading({
- title: '正在请求中',
- mask: true,
- });
- socketOpen = false;
- socketClose = false;
- socketMsgQueue = [];
- wx.connectSocket({
- url:sever_url,
- success:function(res) {
- if (success_cb) {
- success_cb(res);
- }
- },
- fail:function(res) {
- if (fail_cb) {
- fail_cb(res);
- }
- }
- })
- },
- // 发送消息
- SocketTxMsg:function(msg, success_cb, fail_cb) {
- if (socketOpen) {
- wx.sendSocketMessage({
- data: msg,
- success: function(res) {
- if (success_cb) {
- success_cb(res);
- }
- },
- fail: function(res) {
- if (fail_cb) {
- fail_cb(res);
- }
- }
- })
- } else {
- socketMsgQueue.push(options.msg)
- }
- },
- // 关闭Socket
- closeSocket: function(success_cb, fail_cb) {
- if (connectSocketTimeout) {
- clearTimeout(connectSocketTimeout);
- connectSocketTimeout = null;
- };
- socketClose = true;
- this.stopHeartBeat();
- wx.closeSocket({
- success: function(res) {
- if (success_cb) {
- success_cb(res);
- }
- },
- fail: function(res) {
- if (fail_cb) {
- fail_cb(res);
- }
- }
- })
- },
- // 收到消息
- onSocketMessageCallback: function(msg) {
- console.log("收到服务器消息:", msg)
- },
-
- // 开始心跳
- startHeartBeat: function() {
- heart = true;
- this.heartBeat();
- },
-
- // 正在心跳
- heartBeat: function() {
- console.log("启动心跳")
- // 与后端约定,传点消息,保持链接
- var heartbeat_data = "123456"
- var that = this;
- if (!heart) {
- return;
- };
- if (socketOpen) {
- wx.sendSocketMessage({
- data: JSON.stringify({
- "method": "heartbeat",
- "args": "1234"
- }),
- success: function(res) {
- console.log("心跳发送成功, res:", res)
- if (heart) {
- heartBeatTimeout = setTimeout(() => {
- that.heartBeat();
- }, 7000);
- }
- },
- fail: function(res) {
- console.log("心跳发送失败, res:", res)
- if (heartBeatFailCount > 2) {
- that.connectSocket();
- };
- if (heart) {
- heartBeatTimeout = setTimeout(() => {
- that.heartBeat();
- }, 7000);
- };
- heartBeatFailCount++;
- },
- });
- }else{
- // socketMsgQueue.push(heartbeat_data)
- }
- },
-
- // 结束心跳
- stopHeartBeat: function() {
- console.log("结束心跳")
- heart = false;
- if (heartBeatTimeout) {
- clearTimeout(heartBeatTimeout);
- heartBeatTimeout = null;
- };
- if (connectSocketTimeout) {
- clearTimeout(connectSocketTimeout);
- connectSocketTimeout = null;
- }
- }
- };
- // 监听WebSocket打开连接
- wx.onSocketOpen(function(res) {
- wx.hideLoading();
- // 如果已经关闭socket
- if (socketClose) {
- webSocket.closeSocket();
- } else {
- console.log("打开socket成功")
- socketOpen = true
- for (var i = 0; i < socketMsgQueue.length; i++) {
- // webSocket.SocketTxMsg(socketMsgQueue[i], null, null)
- wx.sendSocketMessage({
- data: socketMsgQueue[i],
- success: function(res) {
- console.log("send success, res:", res)
- },
- fail: function(res) {
- console.log("send fail, res:", res)
- }
- })
- };
- socketMsgQueue = []
- // webSocket.startHeartBeat();
- }
- });
-
- // 监听WebSocket错误
- wx.onSocketError(function(res) {
- console.log('WebSocket连接打开失败,请检查!', res);
- });
- // 监听WebSocket接受到服务器的消息
- wx.onSocketMessage(function(res) {
- webSocket.onSocketMessageCallback(res.data);
- });
-
- // 监听WebSocket关闭连接后马上重连
- wx.onSocketClose(function(res) {
- if (!socketClose) {
- clearTimeout(connectSocketTimeout);
- connectSocketTimeout = setTimeout(() => {
- webSocket.connectSocket();
- }, 8000);
- }
- });
-
- module.exports = webSocket;
|