socket.io學(xué)習(xí)教程之基礎(chǔ)介紹(一)
前言
Web端與服務(wù)器間的實(shí)時(shí)數(shù)據(jù)傳輸?shù)氖且粋€(gè)很重要的需求,但最早只能通過AJAX輪詢?cè)儗?shí)現(xiàn)。在WebSocket標(biāo)準(zhǔn)沒有推出之前,AJAX輪詢是唯一可行的方式(通過Flash瀏覽器也可以,但這里不做討論)。AJAX輪詢?cè)硎窃O(shè)置定時(shí)器,定時(shí)通過AJAX同步服務(wù)器數(shù)據(jù)。這種方式存在延時(shí)且對(duì)服務(wù)端造成很大負(fù)載。直到2011年,IETF才標(biāo)準(zhǔn)化WebSocket——一種基于TCP套接字進(jìn)行收發(fā)數(shù)據(jù)的協(xié)議。現(xiàn)如今主流瀏覽器均已支持WebSocket。

socket.io將數(shù)據(jù)傳輸部分獨(dú)立出來形成了engine.io , engine.io對(duì)WebSocket和AJAX輪詢進(jìn)行封裝,形成一套API,屏蔽了細(xì)節(jié)差異和兼容性問題,實(shí)現(xiàn)了跨瀏覽器/跨設(shè)備進(jìn)行雙向數(shù)據(jù)。
socket.io對(duì)engine.io不是必須的,你也可以實(shí)現(xiàn)自己的engine.io,通過server.bind綁定
應(yīng)用
- 實(shí)時(shí)數(shù)據(jù)分析展示(報(bào)表,日志)
- 即時(shí)通訊、聊天,
- 二進(jìn)制流(圖片,音樂,視頻)傳輸
- 多人協(xié)同編輯
- 即時(shí)消息推送
類似技術(shù)
- AJAX輪詢: 基于XMLHttpRequest的AJAX輪詢
- AJAX長輪詢: 類似輪詢,服務(wù)器在客戶端請(qǐng)求后不返回響應(yīng),直到有數(shù)據(jù)需要傳到客戶端,傳完數(shù)據(jù)后客戶端再發(fā)起新的請(qǐng)求。缺點(diǎn)是要額外傳輸?shù)腍TTP頭,保持住請(qǐng)求不響應(yīng)也需要一些額外工作。
- HTTP流: 與AJAX長輪詢類似,服務(wù)端響應(yīng)會(huì)帶上HTTP頭:
Transfer-Encoding: chunked,返回完數(shù)據(jù)到客戶端后客戶端也不需要發(fā)起新的請(qǐng)求,缺點(diǎn)是各個(gè)chunk之間的數(shù)據(jù)難以識(shí)別和處理。 - 插件: 類似Flash,Silverlight, 作為插件越來越被主流瀏覽器和用戶排斥
下面就不同角度對(duì)各技術(shù)進(jìn)行分析
- 單向/雙向
- 單向: AJAX輪詢,AJAX長輪詢,HTTP流
- 雙向: WebSocket, 插件
- 延時(shí)
WebSocket < 插件 < HTTP流 < AJAX長輪詢 < AJAX輪詢
1、效率
插件 > WebSocket > HTTP流 > AJAX長輪詢 > AJAX輪詢
1、移動(dòng)端支持
WebSocket: 基本均支持
HTTP流,AJAX長輪詢,AJAX輪詢: 基本均支持
插件: 基本不支持
1、開發(fā)或設(shè)置難易程度
WebSocket < AJAX輪詢 < 插件 < AJAX長輪詢,HTTP流
總結(jié)
socket.io封裝了WebSocket,不支持WebSocket的情況還提供了降級(jí)AJAX輪詢,功能完備,設(shè)計(jì)優(yōu)雅,是開發(fā)實(shí)時(shí)雙向通訊的不二手段。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- socket.io學(xué)習(xí)教程之基本應(yīng)用(二)
- node.js中的Socket.IO使用實(shí)例
- node.js中Socket.IO的進(jìn)階使用技巧
- 基于socket.io和node.js搭建即時(shí)通信系統(tǒng)
- node.js中的socket.io入門實(shí)例
- 使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
- node中socket.io的事件使用詳解
- node.js中使用socket.io的方法
- node.js中的socket.io的廣播消息
- socket.io學(xué)習(xí)教程之深入學(xué)習(xí)篇(三)
相關(guān)文章
iOS + node.js使用Socket.IO框架進(jìn)行實(shí)時(shí)通信示例
本篇文章主要介紹了iOS + node.js使用Socket.IO框架進(jìn)行實(shí)時(shí)通信示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
Node.js環(huán)境下編寫爬蟲爬取維基百科內(nèi)容的實(shí)例分享
WikiPedia平時(shí)在國內(nèi)不大好訪問-- 所以用爬蟲一次性把要看的東西都爬下來保存慢慢看還是比較好的XD 這里我們就來看一下Node.js環(huán)境下編寫爬蟲爬取維基百科內(nèi)容的實(shí)例分享2016-06-06
基于NodeJS的前后端分離的思考與實(shí)踐(二)模版探索
在傳統(tǒng)的開發(fā)模式中,瀏覽器端與服務(wù)器端是由不同的前后端兩個(gè)團(tuán)隊(duì)開發(fā),但是模版卻又在這兩者中間的模糊地帶。因此模版上面總不可避免的越來越多復(fù)雜邏輯,最終難以維護(hù)。2014-09-09
Node.js使用第三方插件nodemailer實(shí)現(xiàn)郵件發(fā)送示例
這篇文章主要為大家介紹了Node.js使用第三方插件nodemailer實(shí)現(xiàn)郵件發(fā)送示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
NodeJS?Express使用ORM模型訪問關(guān)系型數(shù)據(jù)庫流程詳解
這篇文章主要介紹了NodeJS?Express使用ORM模型訪問關(guān)系型數(shù)據(jù)庫流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
nodemailer郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn)
郵箱注冊(cè)是常見的功能,通常需要發(fā)送郵箱驗(yàn)證碼驗(yàn)證,本文就來介紹一下nodemailer郵箱發(fā)送驗(yàn)證碼的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
Node實(shí)現(xiàn)前端本地開發(fā)接口代理服務(wù)
本文主要介紹了Node實(shí)現(xiàn)前端本地開發(fā)接口代理服務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

