websocket是H5新特性黎休,是一種在單個TCP連接上進行的全雙工通訊協議谤民,允許服務端主動向客戶端推送數據(雙向通信)慎框。
在 WebSocket API 中,瀏覽器和服務器只需要做一個握手的動作徒像,然后黍特,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送锯蛀。
http/https通信只能由客戶端發(fā)起灭衷,服務器端不會主動發(fā)送數據(單向通信)。
實現后臺推送數據功能的方式:
Ajax輪詢(傳統(tǒng))
-使用http協議旁涤,通過定時器翔曲,每隔一段時間讓前端發(fā)送一次請求,讓后端返回數據(不推薦) 劈愚,浪費帶寬等資源瞳遍。
function getChart() {
var request = new XMLHttpRequest();
request.open('get', '后臺接口');
request.send();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
var data = JSON.parse(request.responseText)
...
}
}
};
setInterval(getChart,2000)
Websocket連接服務器(需要后臺配合)
-Websocket 使用 ws 或 wss 的統(tǒng)一資源標志符,類似于 HTTPS菌羽,其中 wss 表示在 TLS 之上的 Websocket掠械。Websocket 使用和 HTTP 相同的 TCP 端口,可以繞過大多數防火墻的限制注祖。默認情況下猾蒂,Websocket 協議使用 80 端口;運行在 TLS 之上時是晨,默認使用 443 端口
var ws = new WebSocket('ws接口');
//連接成功
ws.onopen = function () {
alert('連接成功肚菠!');
};
//連接失敗
ws.onerror = function () {
alert('連接失敗罩缴!');
};
//連接關閉
ws.onclose = function () {
alert('連接關閉蚊逢!');
};
//接收消息
ws.onmessage = function (msg) {
var data = JSON.parse(msg.data)
...
}