Node.js之構(gòu)建WebSocket服務(wù)全過程
更新時間:2024年09月06日 13:25:38 作者:一介白衣ing
這篇文章主要介紹了Node.js之構(gòu)建WebSocket服務(wù)全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
WebSocket簡介
WebSocket是HTML5開始提供的一種在單個TCP 連接上進行全雙工通訊的協(xié)議。
它有如下特點:
- 基于TCP,客戶端和服務(wù)端只建立一個TCP連接。
- 服務(wù)端可以主動向客戶端發(fā)送消息。
- 采用了二進制幀結(jié)構(gòu),不具備HTTP/2多路復(fù)用、優(yōu)先級等特性
- 更輕量的協(xié)議頭,減少數(shù)據(jù)傳輸量。
- WebSocket握手包的報文格式必須符合HTTP報文格式的規(guī)范
客戶端和服務(wù)端的簡單實現(xiàn)
服務(wù)端
服務(wù)端我們使用nodejs-websocket包來實現(xiàn)。
const ws = require("nodejs-websocket"); const server = ws.createServer(function (socket) { // 讀取字符串消息,事件名稱為:text var count = 1; socket.on("text", function (str) { // 在控制臺輸出前端傳來的消息 console.log(str); //向前端回復(fù)消息 setInterval(() => { socket.sendText("服務(wù)器端收到客戶端發(fā)來的消息" + str + count++); }, 2000); }); socket.on("error", () => { console.log("err"); }); }); server.listen(3000, () => { console.log("connected..."); });
nodejs-websocket包讀取字符串事件為text,發(fā)送字符串到客戶端方法為sendText()
還有其他方法和事件請閱讀源碼。
運行上邊的代碼,啟動服務(wù)
客戶端
const WebSocket = require("ws"); const ws = new WebSocket("ws://localhost:3000/"); ws.onopen = function () { setInterval(function () { ws.send("客戶端消息"); }, 2000); }; ws.onmessage = function (e) { console.log(e.data); };
當(dāng)然,這段代碼也可以在瀏覽器直接運行(不需要引入ws包)。
我們使用定時器模擬消息的實時發(fā)送,來觀察客戶端和服務(wù)端消息的通訊過程。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
node.js中的定時器nextTick()和setImmediate()區(qū)別分析
本文介紹了node.js中的定時器nextTick()和setImmediate()的區(qū)別分析,非常的不錯,這里推薦給大家。2014-11-11