1 Star 0 Fork 6

叾屾/tool-box

forked from sohucw/tool-box 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
test.html 3.13 KB
一键复制 编辑 原始数据 按行查看 历史
chenjianwei01 提交于 2022-06-14 11:38 . feat: 更新
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
class Socket {
constructor({ url = '', token = '', roomId = '', callback = () => { } }) {
this.url = url;
this.callback = callback;
this.token = token;
this.roomId = roomId;
this.ws = {};
this.init();
}
init() {
this.ws = new WebSocket(`wss://${this.url}`);
// WebSocket连接成功时触发
this.ws.onopen = () => this.onOpen(this.token, this.roomId);
// WebSocket接受到信息时触发
this.ws.onmessage = e => this.onMessage(e, this.callback);
// WebSocket连接信息错误时触发
this.ws.onerror = this.onError;
// WebSocket关闭时触发
this.ws.onclose = this.onClose;
}
onOpen(token, roomId) {
// 连接时,根据身份校验事件,传参给服务端设置对应的连接信息
this.send({
event: 'auth',
message: {
token,
roomId
}
});
}
send(data) {
this.ws.send(JSON.stringify(data));
}
onMessage(e, callback) {
const data = JSON.parse(e.data);
switch (data.event) {
case 'noAuth':
// 验证失败,返回登录页
location.href = '/login';
break;
case 'heartbeat':
// 心跳检测,当连接成功,服务端就会定时发起ping请求,需要回复,让服务端知道客户端在线,
this.send({
event: 'heartbeat',
message: 'pong'
});
clearTimeout(this.pingTimeout);
this.pingTimeout = setTimeout(() => {
this.close();
this.onError();
}, 30000 + 1000);
break;
default:
callback(data);
}
}
onError() {
console.log('websocket连接错误');
// 连接出错了,1S后重新连接
setTimeout(() => {
this.init();
}, 1000);
}
onClose() {
console.log('websocket连接断开');
}
close() {
// 关闭websocket连接需要关闭心跳检测定时器,防止断开后原来的定时器还在运行连接
clearTimeout(this.pingTimeout);
this.ws.close();
}
}
</script>
</body>
</html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xiaobo1012/tool-box.git
git@gitee.com:xiaobo1012/tool-box.git
xiaobo1012
tool-box
tool-box
master

搜索帮助