国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WebSocket簡述及通過node.js的基本實現(xiàn)

這篇具有很好參考價值的文章主要介紹了WebSocket簡述及通過node.js的基本實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

WebSocket簡述-通過node.js的基本實現(xiàn)

基本概念

WebSocket是自Html5開始在單個TCP連接上進行全雙工通信1的協(xié)議,它使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。

為什么要使用WebSocket

HTTP 并不是為了保持打開連接以便服務(wù)器頻繁地將數(shù)據(jù)推送到 Web 瀏覽器。以前,在系統(tǒng)開發(fā)的過程中大多數(shù) Web 應用程序?qū)⑼ㄟ^頻繁的異步 JavaScript 和 XML (AJAX)實現(xiàn)長輪詢;
與之相比服務(wù)器推送比長輪詢更高效和可擴展,因為 Web 瀏覽器不必通過 AJAX 請求流不斷地請求更新,有更強的及時性且能節(jié)約資源。同時WebSockets 是全雙工連接,因此客戶端也可以將數(shù)據(jù)推送到服務(wù)器

node.js 針對 WebSocket的簡易實現(xiàn)

這里采用node.js對功能進行展示, node.js的使用在這里不作額外介紹

服務(wù)端 server.js

// 引入express框架
var app = require('express')();
var server = require('http').Server(app);
// 引入ws框架支持webSocket實現(xiàn)
var WebSocket = require('ws');
// 針對8080接口進行監(jiān)聽
var wss = new WebSocket.Server({ port: 8080 });
// 當建立連接后,打印日志
wss.on('connection', function connection(ws) {
    console.log('server: receive connection.');
    // 同時返回服務(wù)端收到的信息
    ws.on('message', function incoming(message) {
        console.log('server: received: %s', message);
    });
    // 返回信息
    ws.send('receive');
});
// 綁定訪問地址
app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});
app.listen(3000);

客戶端index.html

<script>
  var ws = new WebSocket('ws://localhost:8080');
  ws.onopen = function () {
    console.log('ws onopen');
    ws.send('from client: hello');
  };
  ws.onmessage = function (e) {
    console.log('ws onmessage');
    console.log('from server: ' + e.data);
  };
</script>

訪問localhost:3000 會打開客戶端頁面,并對應向服務(wù)端發(fā)起請求,可以查看到應有的日志

WebSocket連接是如何建立的

打開控制臺可以跟蹤發(fā)現(xiàn),首先是客戶端通過標準的http請求 get方法發(fā)起升級協(xié)議請求

GET / HTTP/1.1
Host: localhost:8080
Origin: http://127.0.0.1:3000
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: JYB++OaZz3cuJvOOhZ2xHGghN80=

服務(wù)端對應響應升級完成鏈接建立

WebSocket通訊方式

WebSocket客戶端、服務(wù)端通信的最小單位是幀(frame),由1個或多個幀組成一條完整的消息(message)。

發(fā)送端:將消息切割成多個幀,并發(fā)送給服務(wù)端;
接收端:接收消息幀,并將關(guān)聯(lián)的幀重新組裝成完整的消息;

WebSocket的每條消息可能被切分成多個數(shù)據(jù)幀。當WebSocket的接收方收到一個數(shù)據(jù)幀時,會根據(jù)FIN的值來判斷,是否已經(jīng)收到消息的最后一個數(shù)據(jù)幀。

FIN=1表示當前數(shù)據(jù)幀為消息的最后一個數(shù)據(jù)幀,此時接收方已經(jīng)收到完整的消息,可以對消息進行處理。FIN=0,則接收方還需要繼續(xù)監(jiān)聽接收其余的數(shù)據(jù)幀。

此外,opcode在數(shù)據(jù)交換的場景下,表示的是數(shù)據(jù)的類型。0x01表示文本,0x02表示二進制。而0x00比較特殊,表示延續(xù)幀(continuation frame),顧名思義,就是完整消息對應的數(shù)據(jù)幀還沒接收完。

WebSocket的連接保持

WebSocket為了保持客戶端、服務(wù)端的實時雙向通信,需要確??蛻舳恕⒎?wù)端之間的TCP通道保持連接沒有斷開。然而,對于長時間沒有數(shù)據(jù)往來的連接,如果依舊長時間保持著,可能會浪費包括的連接資源。

但不排除有些場景,客戶端、服務(wù)端雖然長時間沒有數(shù)據(jù)往來,但仍需要保持連接。這個時候,可以采用心跳來實現(xiàn)。

發(fā)送方->接收方:ping
接收方->發(fā)送方:pong

對應實現(xiàn)代碼

ws.ping('', false, true);

node.js WebSocket api示例

通過一個代碼完整展示

<h2>Websocket Echo Client</h2>
    <div id="output"></div>
     // 初始化連接和事件
        function setup() {
            output = document.getElementById("output");
            ws = new WebSocket("ws://echo.websocket.org/echo");
            // 監(jiān)聽open
            ws.onopen = function (e) {
                log("Connected");
                sendMessage("Hello WebSocket!");
            }
            // 監(jiān)聽close
            ws.onclose = function (e) {
                log("Disconnected: " + e.reason);
            }
            //監(jiān)聽errors
            ws.onerror = function (e) {
                log("Error ");
            }
            // 監(jiān)聽 messages 
            ws.onmessage = function (e) {
                log("Message received: " + e.data);
                //收到消息后關(guān)閉
                ws.close();
            }
        }
        // 發(fā)送消息
        function sendMessage(msg) {
            ws.send(msg);
            log("Message sent");
        }
        // logging
        function log(s) {
            var p = document.createElement("p");
            p.style.wordWrap = "break-word";
            p.textContent = s;
            output.appendChild(p);
            // Also log information on the javascript console
            console.log(s);
        }
        // Start 
        setup();

  1. 全雙工通信又稱為雙向同時通信,即通信的雙方可以同時發(fā)送和接收信息的信息交互方式。與之不同的是半雙工通信,雖然他也允許數(shù)據(jù)在兩個方向上傳輸,但是同一時間數(shù)據(jù)只能在一個方向上傳輸 ??文章來源地址http://www.zghlxwxcb.cn/news/detail-486099.html

到了這里,關(guān)于WebSocket簡述及通過node.js的基本實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 如何使用websocket+node.js實現(xiàn)pc后臺與小程序端實時通信

    如何使用websocket+node.js實現(xiàn)pc后臺與小程序端實時通信

    實現(xiàn)功能:實現(xiàn)pc后臺與小程序端互發(fā)通信能夠?qū)崟r檢測到 1.安裝ws依賴 2.創(chuàng)建index.js 3.打開終端,啟動服務(wù) 這里是手動點擊連接按鈕,發(fā)起的websocket連接,可自行更改到其他合適的地方連接websocket 1.創(chuàng)建兩個按鈕,連接按鈕,發(fā)送按鈕 2.定義事件,連接ws

    2024年02月03日
    瀏覽(26)
  • 用 Node.js 手寫 WebSocket 協(xié)議

    用 Node.js 手寫 WebSocket 協(xié)議

    目錄 引言 從 http 到 websocekt 的切換 Sec-WebSocket-Key 與 Sec-WebSocket-Accept 全新的二進制協(xié)議 自己實現(xiàn)一個 websocket 服務(wù)器 按照協(xié)議格式解析收到的Buffer 取出opcode 取出MASK與payload長度 根據(jù)mask key讀取數(shù)據(jù) 根據(jù)類型處理數(shù)據(jù) frame 幀 數(shù)據(jù)的發(fā)送 完整代碼 總結(jié) ????????我們知道,

    2024年02月16日
    瀏覽(19)
  • webSocket 聊天室 node.js 版

    webSocket 聊天室 node.js 版

    全局安裝vue腳手架? npm install @vue/cli -g 創(chuàng)建 vue3 + ts 腳手架? vue create vue3-chatroom src 同級目錄下建 server: ? 核心代碼: 完整代碼:

    2024年02月12日
    瀏覽(21)
  • Node.js詳解(三):Node.js的安裝及基本使用

    Node.js詳解(三):Node.js的安裝及基本使用

    Node.js支持在 Windows 、Linux以及在Mac 上安裝使用 安裝非常簡單,無復雜操作;就不多做贅述,掛個連接參考:https://www.runoob.com/nodejs/nodejs-install-setup.html 安裝完成,我們可以使用以下命令來查看當前的 Node 版本: $ node -v v18.16.0 注意:不同版本間可能是有差異的。 1、介紹 nvm全

    2024年02月10日
    瀏覽(23)
  • 【Node.JS】初入前端,學習node.js基本操作

    【Node.JS】初入前端,學習node.js基本操作

    NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種: npm可以分為全局安裝和本地安裝 Node所有API都支持回調(diào)函數(shù),回調(diào)函數(shù)一般作為API的最后一個參數(shù)出現(xiàn) 阻塞代碼實例 非阻塞代碼示例 語法分析 具體示例 事件監(jiān)聽器就是

    2023年04月25日
    瀏覽(27)
  • node.js通過node-java庫調(diào)用java接口(jar包)

    node.js通過node-java庫調(diào)用java接口(jar包)

    最近因項目需求,需要調(diào)用第三方j(luò)ava的打的jar包,但項目后端是用node.js寫的,因此需要用node.js調(diào)用第三方j(luò)ar,網(wǎng)上搜集資料,發(fā)現(xiàn)有一個庫,node-java,可以通過js的方式調(diào)用java語言的包,以及包中的方法,因此整理了一下,以防時間長忘記,具體如下: jdk 1.8 并配置java_home、

    2024年02月12日
    瀏覽(23)
  • Node.js-Express框架基本使用

    Express是基于 node.js 的web應用開發(fā)框架,是一個封裝好的工具包,便于開發(fā)web應用(HTTP服務(wù)) 中間件(Middleware):是一個回調(diào)函數(shù),像路由一樣可以訪問請求對象(request, response). 作用:使用函數(shù)封裝公共操作,簡化代碼。 全局中間件 路由中間件 靜態(tài)資源中間件 注意事項 1、

    2024年02月12日
    瀏覽(26)
  • Node.js-模塊化理解及基本使用

    講一個復雜的程序文件按照一定的規(guī)則拆分成多個獨立的小文件,這些小文件就是小模塊,這就是模塊化。 每個小模塊內(nèi)部的數(shù)據(jù)是私有的,可以暴露內(nèi)部數(shù)據(jù)給外部其他模塊使用。 減少命名的沖突 提高復用性 提高可維護性 按需加載 1.單個模塊暴露 2.多個模塊暴露 暴露數(shù)

    2024年02月14日
    瀏覽(30)
  • 使用node實現(xiàn)websocket

    使用node實現(xiàn)websocket

    websocket 代表了 Web 應用程序通信方式的根本轉(zhuǎn)變。不同于傳統(tǒng)的 HTTP 請求響應周期,即客戶端從服務(wù)器請求數(shù)據(jù)并等待響應, websocket 在客戶端和服務(wù)器之間建立一個持久的全雙工連接。這意味著一旦建立了 websocket ,數(shù)據(jù)可以在任何時候雙向流動,而不需要重復請求。 Web

    2024年02月08日
    瀏覽(13)
  • 通過nvm工具快捷切換node.js版本、以及nvm的安裝

    通過nvm工具快捷切換node.js版本、以及nvm的安裝

    使用nvm可以實現(xiàn)多個Node.js版本之間切換 步驟目錄: 先卸載掉本系統(tǒng)中原有的node版本 去github上下載nvm安裝包 安裝node 常用的一些nvm命令 1、先卸載掉本系統(tǒng)中原有的node版本 2、去github上下載nvm安裝包 https://github.com/coreybutler/nvm-windows/releases 下載:nvm-setup.zip,解壓完后就是一個

    2024年02月14日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包