摘要:本系列文章旨在總結前端技術棧中的一些通用技術本文主要總結之前在之前,請求的主要模式是客戶端發起請求,服務端負責接收,并返回數據。一種比較常見的方式是服務端攜帶參數,訪問某個指定的前端頁面,例如后端主動訪問。協議是基于的一種新的網絡協議。
本系列文章旨在總結前端技術棧中的一些通用技術
本文主要總結websocket
在WebSocket之前,http請求的主要模式是客戶端發起請求,服務端負責接收,并返回數據。如果需要服務端將一些參數主動傳遞至客戶端,下面是一些常見的方法。
一種比較常見的方式是服務端攜帶參數,訪問某個指定的前端頁面,例如后端主動訪問http://www.params.com?want=param1;。params頁面被訪問時接收到了want=param1這個參數,其含義為,服務端想從客戶端拿到param1這個字段的數據。前端就會發出對應http請求來滿足服務端的需求
另一種更加常見的方式就是輪詢(polling),其本質就是利用定時器,不斷像服務端發送請求,直到獲得想要的數據
const polling = setInterval(() => { // 像服務器發出請求 http.(url, options) .then((data) => { if () { // 沒有新消息,繼續輪詢 ... } else { // 拿到新消息,推出輪詢 ... polling.clearInterval(); } }); }, 500);
這兩種方法,總的來說都是妥協性實現,第一種方法對需要通過中間頁面實現,不具備通用性。第二種方法則會浪費大量資源,給服務器帶來不必要的壓力。還有其他很多實現方法,不一一列舉了。
WebSocketWebSocket協議是基于TCP的一種新的網絡協議。它實現了瀏覽器與服務器全雙工(full-duplex)通信——允許服務器主動發送信息給客戶端。
關于網絡協議的問題,本文不多討論(因為筆者暫時也不懂,協議部分以后會放到別的文章里)。
WebSocket使用WebSocket的url與http最大的不同就是協議不同
http的協議是
http://(未加密)和https://(加密)
WebSocket的協議是
ws://(未加密)和 wss://(加密)
本文只以最簡單的node服務端為例。
新建文件夾wsTest
// node端 ws依賴 npm install ws --save
// wsTest/server.js const PORT = 3000; const WebSocketServer = require("ws").Server; const wss = new WebSocketServer({port: PORT}); wss.on("connection", function (ws) { console.log("client connected"); wss.send("websocket connect success"); wss.on("message", function(evt) { console.log(evt); } wss.on("error", function(evt) { console.log(evt); } wss.on("close", function(evt) { console.log(evt); } }); console.log(`server start ${PORT}`);
回到命令行,輸入指令node server.js就可以啟動服務器了
// index.html // 本文件與服務端無關,不需要配置
直接運行index.html,在控制臺network中可以看到對應的WebSocket連接
WebSocket attr & method(前端)(本文僅列舉一些前端WebSocket常用attr,全部api可見官方文檔)
attrWebSocket連接的目標地址
const ws = new WebSocket("ws://www.baidu.com"); ws.url // "ws://www.baidu.com";
readyState表示WebSocket當前的連接狀態
constant | state code | description | |
---|---|---|---|
CONNECTING | 0 | 連接還沒開啟 | |
OPEN | 1 | 連接已開啟并準備好通信 | |
CLOSING | 2 | 連接正在關閉過程中 | |
CLOSED | 3 | 連接已經關閉,活著無法建立 |
當連接已開啟時觸發onopen事件
當從服務端收到消息時觸發onmessage事件
連接拋出錯誤時觸發onerror事件
連接關閉后觸發onclose事件
methodWebsocket.send(message)
用于向服務端發送一條消息
Websocket.close()
用于客戶端主動關閉WebSocket通信
暫時只做這么多介紹,更多詳細內容和使用經驗會會隨著筆者不斷學習應用逐步更新2333,希望大家共同進步
websocket-Mozila官方文檔
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93441.html
摘要:在全國知識圖譜與語義計算大會上,阿里巴巴集團副總裁藏經閣計劃阿里負責人墻輝玄難宣布藏經閣計劃首次在阿里應用落地,以及首次披露大規模知識構建技術細節,并從三個方面進行了解讀。 2018年4月,阿里聯合清華大學、浙江大學、中科院自動化所、中科院軟件所、蘇州大學等五家機構,聯合發布藏經閣(知識引擎)研究計劃,同時還宣布打算用一年時間初步建成首個開放的知識引擎服務平臺,服務社會。 在全國知識圖...
摘要:年月日社區技術支持計劃全面啟動,本文是研發人員在社區答疑過程中關于的一些心得和思考。初識基于的消息總線可以很好的與前端兼容,讓消息的傳遞不再是后端的專利。 2016年2月14日「Rancher社區技術支持計劃」全面啟動,本文是Rancher研發人員在社區答疑過程中關于Subscribe Rancher Events的一些心得和思考。 引言 幾乎每個大型的分布式的集群軟件,都離不開一樣東...
閱讀 2263·2021-09-28 09:36
閱讀 1996·2021-09-22 15:14
閱讀 3623·2019-08-30 12:47
閱讀 3034·2019-08-30 12:44
閱讀 1226·2019-08-29 17:06
閱讀 536·2019-08-29 14:12
閱讀 973·2019-08-29 14:01
閱讀 2581·2019-08-29 12:17