摘要:是開始提供的一種在單個(gè)連接上進(jìn)行全雙工通訊的協(xié)議。輪詢是在特定的的時(shí)間間隔如每秒,由瀏覽器對(duì)服務(wù)器發(fā)出請(qǐng)求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。
WebSocket 是 HTML5 開始提供的一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議。
WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。
現(xiàn)在,很多網(wǎng)站為了實(shí)現(xiàn)推送技術(shù),所用的技術(shù)都是 Ajax 輪詢。輪詢是在特定的的時(shí)間間隔(如每1秒),由瀏覽器對(duì)服務(wù)器發(fā)出HTTP請(qǐng)求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。這種傳統(tǒng)的模式帶來很明顯的缺點(diǎn),即瀏覽器需要不斷的向服務(wù)器發(fā)出請(qǐng)求,然而HTTP請(qǐng)求可能包含較長(zhǎng)的頭部,其中真正有效的數(shù)據(jù)可能只是很小的一部分,顯然這樣會(huì)浪費(fèi)很多的帶寬等資源。
HTML5 定義的 WebSocket 協(xié)議,能更好的節(jié)省服務(wù)器資源和帶寬,并且能夠更實(shí)時(shí)地進(jìn)行通訊。
瀏覽器通過 JavaScript 向服務(wù)器發(fā)出建立 WebSocket 連接的請(qǐng)求,連接建立以后,客戶端和服務(wù)器端就可以通過 TCP 連接直接交換數(shù)據(jù)。
當(dāng)你獲取 Web Socket 連接后,你可以通過 send() 方法來向服務(wù)器發(fā)送數(shù)據(jù),并通過 onmessage 事件來接收服務(wù)器返回的數(shù)據(jù)。
DEMO如下
// client side file let socket = new WebSocket("ws://localhost:9999"); // 當(dāng)連接成功執(zhí)行回調(diào)函數(shù) socket.onopen = function () { console.log("客戶端連接成功"); // 向服務(wù)器發(fā)送一個(gè)消息 socket.send("這是客戶端發(fā)給服務(wù)器的消息"); } // 綁定事件是用加屬性的方式 socket.onmessage = function (res) { console.log("收到服務(wù)器端的響應(yīng)是", res); }
// server side file /* npm i ws -S */ /* 用ws模塊啟動(dòng)一個(gè)websocket服務(wù)器,監(jiān)聽 9999 端口 */ let WebSocketServer = require("ws").Server; let wsServer = new WebSocketServer({port: 9999}); wsServer.on("connection", socket=>{ console.log("服務(wù)器連接成功"); socket.on("message", msg=>{ console.log("從客戶端接收到的信息為"+msg); socket.send("這是從服務(wù)器發(fā)送到客服端的信息"); }) })
簡(jiǎn)單模擬智能客服聊天
{{item.sendContent || item.acceptContent}}
const contents = ["你好", "hi", "hello", "nice to meet you", "how are you", "how do you do"] let WebSocketServer = require("ws").Server; let wsServer = new WebSocketServer({port: 9999}); wsServer.on("connection", socket=>{ console.log("服務(wù)器連接成功"); socket.on("message", msg=>{ console.log("從客戶端接收到的信息為"+msg); socket.send(contents[parseInt(Math.random()*contents.length)]); }) })
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/109233.html
時(shí)間:2018年04月11日星期三 說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com 教學(xué)源碼:https://github.com/zccodere/s... 學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 什么是Netty 高性能、事件驅(qū)動(dòng)、異步非阻塞的IO Java開源框架 基于NIO的客戶...
摘要:概述本文是系列的第一篇,主要介紹相關(guān)的基礎(chǔ)協(xié)議知識(shí)和??蛻舳耸盏巾憫?yīng)后,立即發(fā)起下一次的請(qǐng)求。收到消息通過事件來接收消息。類型則需要傳遞一個(gè)對(duì)象作為參數(shù),相關(guān)的內(nèi)容也將在本系列第二篇中進(jìn)行介紹。 概述 本文是WebSocket系列的第一篇,主要介紹WebSocket相關(guān)的基礎(chǔ)協(xié)議知識(shí)和API。由于WebSocket的相關(guān)介紹在MDN中分布較亂,初學(xué)者不太容易入門,因此通過本文將相關(guān)基礎(chǔ)...
摘要:長(zhǎng)輪循長(zhǎng)輪循是對(duì)定時(shí)輪詢的改進(jìn)和提高,目地是為了降低無效的網(wǎng)絡(luò)傳輸。是規(guī)范的一部分,它是一種流技術(shù),它的規(guī)范由兩部分組成,第一個(gè)部分是服務(wù)器端與瀏覽器端之間的通訊協(xié)議,第二部分則是在瀏覽器端提供使用的對(duì)象。下一篇之客戶端與服務(wù)器端的交互二 1. 長(zhǎng)鏈接技術(shù)介紹 說到websocket,必須講到在它之前的各種長(zhǎng)鏈接技術(shù),比如輪循,長(zhǎng)輪循,sse等。長(zhǎng)鏈接顧名思義,就是讓客戶端瀏覽器與服務(wù)...
摘要:進(jìn)程可以使用函數(shù)向進(jìn)程投遞新的任務(wù)。當(dāng)前的進(jìn)程在調(diào)用回調(diào)函數(shù)時(shí)會(huì)將進(jìn)程狀態(tài)切換為忙碌,這時(shí)將不再接收新的,當(dāng)函數(shù)返回時(shí)會(huì)將進(jìn)程狀態(tài)切換為空閑然后繼續(xù)接收新的。當(dāng)進(jìn)程投遞的任務(wù)在中完成時(shí),進(jìn)程會(huì)通過方法將任務(wù)處理的結(jié)果發(fā)送給進(jìn)程。 swoole——從入門到放棄(一) 一、swoole的源碼包安裝 下載swoole源碼:git clone https://gitee.com/swoole...
閱讀 3338·2021-11-22 15:22
閱讀 2862·2021-10-12 10:12
閱讀 2156·2021-08-21 14:10
閱讀 3822·2021-08-19 11:13
閱讀 2841·2019-08-30 15:43
閱讀 3223·2019-08-29 16:52
閱讀 438·2019-08-29 16:41
閱讀 1427·2019-08-29 12:53