Node.js之構(gòu)建WebSocket服務(wù)全過(guò)程
WebSocket簡(jiǎn)介
WebSocket是HTML5開(kāi)始提供的一種在單個(gè)TCP 連接上進(jìn)行全雙工通訊的協(xié)議。
它有如下特點(diǎn):
- 基于TCP,客戶端和服務(wù)端只建立一個(gè)TCP連接。
- 服務(wù)端可以主動(dòng)向客戶端發(fā)送消息。
- 采用了二進(jìn)制幀結(jié)構(gòu),不具備HTTP/2多路復(fù)用、優(yōu)先級(jí)等特性
- 更輕量的協(xié)議頭,減少數(shù)據(jù)傳輸量。
- WebSocket握手包的報(bào)文格式必須符合HTTP報(bào)文格式的規(guī)范
客戶端和服務(wù)端的簡(jiǎn)單實(shí)現(xiàn)
服務(wù)端
服務(wù)端我們使用nodejs-websocket包來(lái)實(shí)現(xiàn)。
const ws = require("nodejs-websocket");
const server = ws.createServer(function (socket) {
// 讀取字符串消息,事件名稱為:text
var count = 1;
socket.on("text", function (str) {
// 在控制臺(tái)輸出前端傳來(lái)的消息
console.log(str);
//向前端回復(fù)消息
setInterval(() => {
socket.sendText("服務(wù)器端收到客戶端發(fā)來(lái)的消息" + str + count++);
}, 2000);
});
socket.on("error", () => {
console.log("err");
});
});
server.listen(3000, () => {
console.log("connected...");
});nodejs-websocket包讀取字符串事件為text,發(fā)送字符串到客戶端方法為sendText()
還有其他方法和事件請(qǐng)閱讀源碼。
運(yùn)行上邊的代碼,啟動(dòng)服務(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)然,這段代碼也可以在瀏覽器直接運(yùn)行(不需要引入ws包)。
我們使用定時(shí)器模擬消息的實(shí)時(shí)發(fā)送,來(lái)觀察客戶端和服務(wù)端消息的通訊過(guò)程。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用Node.js編寫跨平臺(tái)的spawn語(yǔ)句詳解
Node.js 最強(qiáng)大的一點(diǎn)就是“跨平臺(tái)”。只要在編碼時(shí)稍微注意一下,你的代碼就通吃 Windows、Linux 和 OSX 平臺(tái)。下面這篇文章主要介紹了如何利用Node.js編寫跨平臺(tái)的spawn語(yǔ)句,需要的朋友可以參考借鑒。2017-02-02
詳解nodejs微信公眾號(hào)開(kāi)發(fā)——5.素材管理接口
這篇文章主要介紹了詳解nodejs微信公眾號(hào)開(kāi)發(fā)——5.素材管理接口,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
Express 配置HTML頁(yè)面訪問(wèn)的實(shí)現(xiàn)
這篇文章主要介紹了Express 配置HTML頁(yè)面訪問(wèn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
node.js中的fs.readSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.readSync方法使用說(shuō)明,本文介紹了fs.readSync方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
詳解從買域名到使用pm2部署node.js項(xiàng)目全過(guò)程
本篇文章主要介紹了詳解從買域名到使用pm2部署node.js項(xiàng)目全過(guò)程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
node.js中的定時(shí)器nextTick()和setImmediate()區(qū)別分析
本文介紹了node.js中的定時(shí)器nextTick()和setImmediate()的區(qū)別分析,非常的不錯(cuò),這里推薦給大家。2014-11-11

