柚子快報邀請碼778899分享:webSocket
柚子快報邀請碼778899分享:webSocket
簡介
他是除了http之外可以跟后端通信的方式。
http請求和ws請求的區(qū)別:
http:要是客戶端不發(fā)送請求 后端沒辦法返回數(shù)據(jù)。
ws:只要建立一次鏈接(持久連接),如果服務(wù)端給客戶端數(shù)據(jù) 可以直接給 不需要先傳過來。
http協(xié)議是短鏈接,因為請求之后,都會關(guān)閉連接,下次重新請求數(shù)據(jù),需要再次打開連接。WebSocket協(xié)議是一種長連接,只需要通過一次請求來初始化鏈接,然后所有的請求和響應(yīng)都是通過這個TCP鏈接進行通信。
用法
客戶端實現(xiàn):使用??WebSocket()構(gòu)造函數(shù)來構(gòu)造一個?WebSocket。
var ws = new?WebSocket(url)請求的地址url
?WebSocket事件:
ws.onOpen:連接建立時觸發(fā)
ws.onMessage:客戶端接收服務(wù)器數(shù)據(jù)時觸發(fā)
ws.onerror:通信出錯
ws.onclose:連接關(guān)閉
?WebSocket方法:
send():使用連接發(fā)送數(shù)據(jù)
使用nodejs練習(xí)WebSocket
1.安裝ws : npm i ws
客戶端:
服務(wù)器:
var express = require('express');
var router = express.Router();
// 引入ws模塊
const WebSocket = require('ws').Server;
// 設(shè)置端口號
const port= 10086
// 1.創(chuàng)建WebSocket服務(wù)器
const server = new WebSocket({port},()=>{
? console.log("WebSocket服務(wù)正式開啟");
})
const errorhandle = (error)=>{
console.log("連接出錯了!",error)
}
const closehandle = ()=>{
? console.log("連接斷開了!")
}
// const messagehandle = (data)=>{
// ? console.log("客戶端來消息了!",JSON.parse(data))
// ? this.send(JSON.parse(data))
// }
function messagehandle(data){
? console.log("客戶端來消息了!",JSON.parse(data))
? this.send(JSON.parse(data))
}
// const openhandle = ()=>{
// ? console.log("連接打開了!")
// }
// 建立連接
// 創(chuàng)建了一個WebSocket服務(wù)器,監(jiān)聽10086端口。
// 當有客戶端連接到服務(wù)器時,服務(wù)器會觸發(fā)connection事件,我們可以在事件處理程序中處理連接事件。
server.on("connection",(ws)=>{
? console.log("客戶端連接了!");
? // 客戶端的監(jiān)聽
? ws.on('error',errorhandle)
? ws.on('close',closehandle)
? ws.on('message',messagehandle)
? // ws.on('open',openhandle)
})
?
/* GET home page. */
router.get('/', function(req, res, next) {
? res.render('index', { title: 'Express' });
});
module.exports = router;
WebSocket心跳機制和斷線重連
柚子快報邀請碼778899分享:webSocket
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。