封装socket.js
class Socket {
/**
* @description: 初始化实例属性,保存参数
*
*/
constructor(options) {
this.url = options.url;
this.callback = options.received;
this.name = options.name || 'default';
this.ws = null;
this.status = null;
this.pingInterval = null;
// 心跳检测频率
this._timeout = 3000;
this.isHeart = options.isHeart;
this.isReconnection = options.isReconnection;
}
connect(data) {
this.ws = new WebSocket(this.url);
// 建立连接
this.ws.onopen = (e) => {
this.status = 'open';
console.log("连接成功",e)
if(this.isHeart) {
// 心跳
this._heartCheck()
}
// 给后台发送数据
if(data !== undefined) {
return this.ws.send(JSON.stringify({type: 'init'}))
}
}
// 接受服务器返回的信息
this.ws.onmessage = (e) => {
if(typeof this.callback === 'function'){
return this.callback(e.data)
}else{
console.log('参数的类型必须为函数')
}
}
// 关闭连接
this.ws.onclose = (e) => {
console.log('onclose',e)
this._closeSocket(e)
}
// 报错
this.onerror = (e) => {
console.log('onerror',e)
this._closeSocket(e)
}
}
sendMsg(data) {
let msg = JSON.stringify(data)
return this.ws.send(msg)
}
_resetHeart() {
clearInterval(this.pingInterval)
return this
}
_heartCheck() {
this.pingInterval = setInterval(() => {
if(this.ws.readyState === 1) {
this.ws.send(JSON.stringify({type: 'ping'}))
}
},this._timeout)
}
_closeSocket(e) {
this._resetHeart()
if(this.status !== 'close') {
console.log('断开,重连',e)
if(this.isReconnection){
// 重连
this.connect()
}
}else{
// 手动关闭了
console.log('手动关闭',e)
}
}
close() {
this.status = 'close'
this._resetHeart()
return this.ws.close();
}
}
使用
// 引入文件
<script src="./socket.js"></script>
<script>
const ws = new Socket({
url: 'ws://',// 地址
name: '',// name
isHeart:true,// 是否心跳
isReconnection:false,//是否断开重连
received: function(data){
// 监听服务器返回信息
console.log("received",data)
}
});
// 建立连接
let data = {
type: 'init'
}
ws.connect(data);
// 发送消息
let sendData = {
type: 'sendMsg'
}
ws.sendMsg(sendData)
// 手动关闭
ws.close()
</script>
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
- 找不到素材资源介绍文章里的示例图片?
- 对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
- 模板不会安装或需要功能定制以及二次开发?
- 请QQ联系我们
发表评论
还没有评论,快来抢沙发吧!