2024-04-17 17:44:58 3阅读
Web 应用的交互过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、海量并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是 Web 应用经常面临的问题,比如金融证券的实时信息,Web 导航应用中的地理位置获取,社交网络的实时讯息推送等。
需要注意的是,WebSocket 是一种持久化的协议,一旦连接建立成功,它会保持长时间的连接状态,不会像传统的 HTTP 请求那样频繁地建立和关闭连接。这种长连接的特性使得 WebSocket 协议在实时通信场景下具有较好的性能优势。
let ws = new WebSocket("url");
ws.onopen = function () {
console.log("链接成功");
};
ws.onmessage = function (data) {
console.log('接受服务端数据', data)
ws.send('hello world')
};
ws.send('hello world')
// WebSocket心跳检测
var ws_heartCheck = {
timeout: 5000, // 5秒一次心跳
timeoutObj: null, // 执行心跳的定时器
serverTimeoutObj: null, // 服务器超时定时器
reset: function(){ // 重置方法
clearTimeout(this.timeoutObj);
clearTimeout(this.serverTimeoutObj);
return this;
},
start: function(){ // 启动方法
var self = this;
this.timeoutObj = setTimeout(function(){
// 这里发送一个心跳信息,后端收到后,返回一个讯息,在onmessage拿到返回的心跳(讯息)就说明连接正常
ws.send("check");
// 如果超过一定时间还没重置,说明后端主动断开了
self.serverTimeoutObj = setTimeout(function(){
// 如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
ws.close();
}, self.timeout);
}, this.timeout);
}
}
2024-04-17 17:44:58 3阅读
Web 应用的交互过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、海量并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是 Web 应用经常面临的问题,比如金融证券的实时信息,Web 导航应用中的地理位置获取,社交网络的实时讯息推送等。
需要注意的是,WebSocket 是一种持久化的协议,一旦连接建立成功,它会保持长时间的连接状态,不会像传统的 HTTP 请求那样频繁地建立和关闭连接。这种长连接的特性使得 WebSocket 协议在实时通信场景下具有较好的性能优势。
let ws = new WebSocket("url");
ws.onopen = function () {
console.log("链接成功");
};
ws.onmessage = function (data) {
console.log('接受服务端数据', data)
ws.send('hello world')
};
ws.send('hello world')
// WebSocket心跳检测
var ws_heartCheck = {
timeout: 5000, // 5秒一次心跳
timeoutObj: null, // 执行心跳的定时器
serverTimeoutObj: null, // 服务器超时定时器
reset: function(){ // 重置方法
clearTimeout(this.timeoutObj);
clearTimeout(this.serverTimeoutObj);
return this;
},
start: function(){ // 启动方法
var self = this;
this.timeoutObj = setTimeout(function(){
// 这里发送一个心跳信息,后端收到后,返回一个讯息,在onmessage拿到返回的心跳(讯息)就说明连接正常
ws.send("check");
// 如果超过一定时间还没重置,说明后端主动断开了
self.serverTimeoutObj = setTimeout(function(){
// 如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
ws.close();
}, self.timeout);
}, this.timeout);
}
}