(websocket)⼩程序⼼跳包和pc⼼跳包
1、我的开发⽅式全部为es6的语法,并且⽤es6的class⽅式封装⼼跳
2、代码仅供参考,虽然实际项⽬中个⼈是有使⽤的
3、所有代码我都⽤注释,就不仔细解释了。但是能⽤。
⼀、pc⼼跳
class WebSockets {
constructor(opt) {
//websocket实例
this.ws = null;
//url
this.url = opt.url || null;
/
/⼼跳数据
this.heartdata = opt.heartdata || null;
//多久发送⼀次⼼跳
this.hearttime = opt.hearttime || 1000 * 50;
//是否连接成功
this.iscon = false;
//重连序列
this.isconnum = null;
//多久重连⼀次,默认5秒
//⼼跳序列
this.heartnum = null;
//消息数据回调
this.msg = opt.success || function() {};
//是否关闭连接
this.isclose = false;
}
//websocket连接
wsConnect() {
if (this.url) {
this.ws = new WebSocket(this.url);
return 1;
} else {
throw console.log("请输⼊地址");
}
}
//监听事件
monitor() {
let ws = this.ws;
if (!this.isclose) {
//关闭
console.log(e);
<();
};
//报错时的回调函数
console.log(e);
<();
};
//连接成功
console.log(e);
this.succ();
//连接成功需要马上发送⼀次数据
this.ws.send(JSON.stringify(this.heartdata));
};
//收到服务器数据
//收到服务器数据
}
}
messagess() {
//收到服务器数据
ssage = e => {
//console.log(e);
this.msg(e);
this.succ();
};
}
//⼼跳数据
heartbeatdata() {
if (this.heartdata) {
clearTimeout(this.heartnum);
this.heartnum = setTimeout(() => {
console.log("当前发送⼼跳:", this.heartdata);
this.ws.send(JSON.stringify(this.heartdata));
}, this.hearttime);
} else {
throw console.log("发送数据不能为空");
}
}
//重连事件
reConnect() {
//只有连接失败的时候会进⾏重连
if (!this.iscon) {
clearTimeout(this.isconnum);
this.isconnum = setTimeout(() => {
console.log(this.isconnum + "重连……");
this.wsConnect();
}, ime);
}
}
//成功处理事件
succ() {
//成功需要关闭重连事件,并且继续发送数据
this.iscon = true;
clearTimeout(this.isconnum);
this.heartbeatdata();
}
//错误事件
err() {
if (!this.isclose) {
//失败需要关闭成功事件,并且标注为失败,进⼊重连程序 this.iscon = false;
clearTimeout(this.heartnum);
}
}
/
/⼼跳数据修改
soupdate(opt2) {
if (opt2.data) {
this.hearttime = opt2.data;
this.ws.send(JSON.stringify(opt2.data));
console.log(123, JSON.stringify(opt2.data));
ssage = e => {
console.log(e);
opt2.success(e);
};
} else {
console.log("填写⼼跳数据");
}
}
}
//websocket关闭
guanbi() {
this.isclose = true;
clearTimeout(this.isconnum);
clearTimeout(this.heartnum);
this.ws.close();
console.log("websocket退出");
}
}
/*
//初始使⽤⽅式
let sock = new socket({
heartdata: "", //⼼跳数据包,必须
hearttime: 1000, //⼼跳发送时间
contime: 1000, //重连时间间隔建议3秒以上
url: url, //看不懂毙
success: e => {
console.log(e);
}
});
sock.wsConnect()
sock.guanbi() //关闭websocket
*/
export default WebSockets;
⼆、⼩程序⼼跳处理:
//采⽤类⽅式封装
class websocket{
constructor(opt) {
//多久重连⼀次
//重连延迟函数序列
this.settime="";
//是否连接成功
this.isconnect=false;
//⼼跳发送数据
this.heartdata=opt.heartdata||{};
//多久发送⼀次⼼跳
this.heartbeatsettime = opt.hearttime || 1000 * 50;
//⼼跳延迟函数序列
this.heartstime=0;
/
/url
this.url=opt.url||"";
//是否关闭⼼跳代码
//发送信息回调
this.success = opt.success || function () {};
}
//连接
connectsocket(){
return new Promise((suc,err)=>{
if(this.url){
url:`${this.url}?topic=${pic}&action=${this.heartdata.action}&abbr=${this.heartdata.abbr}&openid=${this.heartdata.openid}`, success:task=>{
//将websocket任务返回出去
suc();
},
fail:err=>{
console.log(1,err);
this.fails();
err();
}
});
}else {
console.log("未输⼊地址");
err();
}
});
};
//错误连接发⽣重连
chonglian(){
//必须先清理之前的定时器
let that= this;
clearTimeout(this.settime);
//判断是否连接成功,成功则不再进⾏重新连接 if(!this.isconnect){
//延迟发送
this.settime = setTimeout(()=>{
},Time);
}
};
//⼼跳发送
heartbeat(){
let sock = this.socket;
//console.log(this.heartdata);
//先清理之前的⼼跳
clearTimeout(this.heartstime);
this.heartstime=setTimeout(()=>{
wx.sendSocketMessage({
data:JSON.stringify(this.heartdata),
success:e=>{
//发送成功则代表服务器正常
this.succ();
},
fail:e=>{
//发送失败则代表服务器异常
this.fails();
}
});
//注意⼼跳多久⼀次
},this.heartbeatsettime);
}
//监听事件
monitor(){
//检测异常关闭则执⾏重连
console.log(e);
this.fails();
});
console.log(e);
this.fails();
});
//连接成功则设置连接成功参数
//成功则关闭重连函数
this.succ();
//⾸次连接发送数据
wx.sendSocketMessage({
data:JSON.stringify(this.heartdata),
success:()=>{
//发送成功则代表服务器正常
this.succ();
},
fail:e=>{
//发送失败则代表服务器异常
this.fails();
}
});
//回调函数
});
//接收发送信息
this.sendsucc();
}
sendsucc(){
//监听发送⼼跳之后数据是否正常返回,返回则再发⼀次⼼跳
this.success(res);
websocket和socket
this.succ();
});
}
//成功的处理
succ(){
this.isconnect = true;
this.heartbeat();
}
//失败的处理
fails(){
if(!lse){
this.isconnect=false;
this.chonglian();
}
}
//⼼跳修改函数
heartup(e){
let that = this;
return new Promise((suc,err) => {
if(e){
that.heartdata = e;
//修改⼼跳之后⽴刻发送⼀次数据,单独发送,不和⼼跳数据重叠,但是会取消之前的⼼跳队列 wx.sendSocketMessage({
data:JSON.stringify(e),
success:e=>{
//发送成功则代表服务器正常
suc(e);
},
fail:e=>{
//发送失败则代表服务器异常
err(e);
}
});
}else {
err("请输⼊⼼跳数据");
}
});
}
//仅发送⼀次⼼跳数据
heartone(e){
return new Promise((suc,err) => {
if(e){
//修改⼼跳之后⽴刻发送⼀次数据,单独发送,不和⼼跳数据重叠,但是会取消之前的⼼跳队列 wx.sendSocketMessage({
data:JSON.stringify(e),
success:e=>{
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论