⼩程序websocket⼼跳库(websocket-heartbeat-
miniprogram)
前⾔
在16年的时候因为项⽬接触到websocket,⽽后对⼼跳重连做了⼀次总结,写了篇博客,⽽后18年对之前github上的demo代码进⾏了再次开发和开源,最终封装成库。如下:
在2020年也就是今年初,同事建议说可以考虑兼容⼀下⼩程序,⼼想也挺好的。便有了今天的 websocket-heartbeat-miniprogram,这次基于以前的代码新建了⼀个项⽬,只做⼩程序的版本,因为涉及到各种⼩程序以及相关框架的兼容,觉得还是单独出⼀个包,更专注⼀点。
介绍
websocket-heartbeat-miniprogram基于⼩程序的websocket相关API进⾏封装,主要⽬的是保障客户端websocket与服务端连接状态。该程序有⼼跳检测及⾃动重连机制,当⽹络断开或者后端服务问题造成客户端websocket断开,程序会⾃动尝试重新连接直到再次连接成功。兼容市⾯上⼤部分⼩程序,百度,⽀付宝等,只要都是统⼀的⼩程序weboscket-API规范。也⽀持⼩程序框架⽐如Taro等。⽆论如何,业务是需要⼀层⼼跳机制的,否则⼀些情况下会丢失连接导致功能⽆法使⽤。
⽤法
安装
前端websocket怎么用npm install --save websocket-heartbeat-miniprogram
引⼊使⽤
import WebsocketHeartbeat from 'websocket-heartbeat-miniprogram';
WebsocketHeartbeat({
miniprogram: wx,
connectSocketParams: {
url: 'ws://xxx'
}
})
.
then(task => {
console.log('open');
};
console.log('close');
};
console.log('onError:', e);
};
console.log('onMessage', data);
};
console.log('');
};
Open(data => {//原⽣实例注册函数,重连后丢失
console.log('socketTask open');
});
Message(data => {//原⽣实例注册函数,重连后丢失
console.log('socketTask data');
});
})
本程序内部总是使⽤⼩程序connectSocket⽅法进⾏socket连接,如果socket断开,本程序内部会再次执⾏⼩程序的connectSocket⽅法,以此来重新建⽴连接,重连都会建⽴新的⼩程序socket实例。
WebsocketHeartbeat⽅法返回⼀个promise,返回的task对象是本程序的⼀个实例,提供了
onOpen,onClose,onError,onMessage,onReconnect等钩⼦函数。也暴露了⼩程序本⾝的实例
(socketTask),task.socketTask就是⼩程序connectSocket返回的实例,⽽task.socketTask是⼩程序的原⽣实例,它们通过onXXX⽅法传递函数进⾏监听注册,在socket重连以后,内部重新通过connectSocket新建实例,将会返回新的⼩程序原⽣实例,因此之前通过XXX注册的这些函数将会丢失。⽽本程序内部提供的钩⼦函数重连上以后依然有效。⼤部分情况下推荐就使⽤本程序的钩⼦函数。
⽀付宝⼩程序差异
⽀付宝⼩程序只允许同时存在⼀个socket连接,原⽣的API也和其他⼩程序有⼀点⼩差异,本程序已经做了兼容,但是还是要注意⽀付宝只允许建⽴⼀个socket,如果建⽴多个socket,前⾯的socket都会被系统关闭,⼀定要通过本程序实例的
task.close关闭旧的socket,否则程序会⼀直重连,导致所有socket相互冲突⽆法使⽤。
约定
1.只能通过前端主动关闭socket连接
如果需要断开socket,应该执⾏task.close()⽅法。如果后端想要关闭socket,应该下发⼀个消息,前端判断此消息,前端再调⽤task.close()⽅法关闭。因为⽆论是后端调⽤close还是因为其他原因造成的socket关闭,前端的socket都会触发onClose事件,程序⽆法判断是什么原因导致的关闭。因此本程序会默认尝试重连。
import WebsocketHeartbeat from 'websocket-heartbeat-miniprogram';
WebsocketHeartbeat({
miniprogram: wx,
connectSocketParams: {
url: 'ws://xxxx'
}
})
.then(task => {
if(data.data == 'close') task.close();//关闭socket并且,不再重连
};
})
2.后端对前端⼼跳的反馈
前端发送⼼跳消息,后端收到后,需要⽴刻返回响应消息,后端响应的消息可以是任何值,因为本程序并不处理和判断响应的⼼跳消息,⽽只是在收到任何消息后,重置⼼跳,因为收到任何消息就说明连接是正常的。因此本程序收到任何后端返回的消息都会重置⼼跳倒计时,以此来减少不必要的请求,减少服务器压⼒。
API
结语
程序已经经过单元测试,也在百度,⽀付宝,等⼩程序之中实际测试和基于Taro测试。程序长期维护,发现兼容问题或者程序问题,希望得到issue反馈!
到此这篇关于⼩程序websocket⼼跳库(websocket-heartbeat-miniprogram)的⽂章就介绍到这了,更多相关⼩程序websocket⼼跳库内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论