摘要:在標準沒有推出之前,輪詢是唯一可行的方式通過瀏覽器也可以,但這里不做討論。這種方式存在延時且對服務端造成很大負載。直到年,才標準化一種基于套接字進行收發(fā)數(shù)據(jù)的協(xié)議?,F(xiàn)如今主流瀏覽器均已支持。
socket.io提供了基于事件的實時雙向通訊
歷史Web端與服務器間的實時數(shù)據(jù)傳輸?shù)氖且粋€很重要的需求,但最早只能通過AJAX輪詢詢實現(xiàn)。在WebSocket標準沒有推出之前,AJAX輪詢是唯一可行的方式(通過Flash瀏覽器也可以,但這里不做討論)。AJAX輪詢原理是設置定時器,定時通過AJAX同步服務器數(shù)據(jù)。這種方式存在延時且對服務端造成很大負載。直到2011年,IETF才標準化WebSocket——一種基于TCP套接字進行收發(fā)數(shù)據(jù)的協(xié)議?,F(xiàn)如今主流瀏覽器均已支持WebSocket。
socket.io將數(shù)據(jù)傳輸部分獨立出來形成了engine.io, engine.io對WebSocket和AJAX輪詢進行封裝,形成一套API,屏蔽了細節(jié)差異和兼容性問題,實現(xiàn)了跨瀏覽器/跨設備進行雙向數(shù)據(jù)。
應用socket.io對engine.io不是必須的,你也可以實現(xiàn)自己的engine.io,通過server.bind綁定
實時數(shù)據(jù)分析展示(報表,日志)
即時通訊、聊天,
二進制流(圖片,音樂,視頻)傳輸
多人協(xié)同編輯
即時消息推送
類似技術AJAX輪詢: 基于XMLHttpRequest的AJAX輪詢
AJAX長輪詢: 類似輪詢,服務器在客戶端請求后不返回響應,直到有數(shù)據(jù)需要傳到客戶端,傳完數(shù)據(jù)后客戶端再發(fā)起新的請求。缺點是要額外傳輸?shù)腍TTP頭,保持住請求不響應也需要一些額外工作。
HTTP流: 與AJAX長輪詢類似,服務端響應會帶上HTTP頭: Transfer-Encoding: chunked,返回完數(shù)據(jù)到客戶端后客戶端也不需要發(fā)起新的請求,缺點是各個chunk之間的數(shù)據(jù)難以識別和處理。
插件: 類似Flash,Silverlight, 作為插件越來越被主流瀏覽器和用戶排斥
下面就不同角度對各技術進行分析
單向/雙向
單向: AJAX輪詢,AJAX長輪詢,HTTP流
雙向: WebSocket, 插件
延時
WebSocket < 插件 < HTTP流 < AJAX長輪詢 < AJAX輪詢
效率
插件 > WebSocket > HTTP流 > AJAX長輪詢 > AJAX輪詢
移動端支持
WebSocket: 基本均支持
HTTP流,AJAX長輪詢,AJAX輪詢: 基本均支持
插件: 基本不支持
開發(fā)或設置難易程度
WebSocket < AJAX輪詢 < 插件 < AJAX長輪詢,HTTP流
結(jié)論socket.io封裝了WebSocket,不支持WebSocket的情況還提供了降級AJAX輪詢,功能完備,設計優(yōu)雅,是開發(fā)實時雙向通訊的不二手段。
更多文章的目錄在這里
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/82558.html
摘要:這個文件事件處理器是單線程的,所以叫做單線程模型,采用多路復用機制同時監(jiān)聽多個,根據(jù)上的事件來選擇對應的事件處理器處理這個事件。 為什么使用緩存 優(yōu)點: 高性能 高并發(fā) MySQL天然對高并發(fā)不好,MySQL單機支撐2000qps也開始容易報警,可以使用緩存,讓數(shù)據(jù)查詢從緩存中拿出數(shù)據(jù) 缺點: 緩存的數(shù)據(jù)和數(shù)據(jù)庫的數(shù)據(jù)不一致 緩存雪崩 緩存穿透 緩存并發(fā)競爭 redis 和m...
摘要:阻塞當進行讀寫時,線程是阻塞的狀態(tài)。當任何一個收到數(shù)據(jù)后,中斷程序?qū)酒疬M程。接收數(shù)據(jù)當收到數(shù)據(jù)后,中斷程序會給的就緒列表添加引用。當接收到數(shù)據(jù),中斷程序一方面修改,另一方面喚醒等待隊列中的進程,進程再次進入運行狀態(tài)如下圖。 本篇文章目的在于基本概念和原理的解釋,不會貼過多的使用代碼。 什么是NIO Java NIO (New IO)是 Java 的另一個 IO API (來自 jav...
摘要:為了達到這種雙向的實時消息傳遞,很明顯地考慮用來實現(xiàn)。注意這個文件并不能用在實際的項目中,只是用來顯示消息推送的效果而已。參考資料本文在我博客上的原地址利用實現(xiàn)消息實時推送 項目背景介紹 最近在寫的項目中存在著社交模塊,需要實現(xiàn)這樣的一個功能:當發(fā)生了用戶被點贊、評論、關注等操作時,需要由服務器向用戶實時地推送一條消息。最終完成的項目地址為:socket-message-push,這里...
閱讀 2216·2021-10-08 10:15
閱讀 1262·2019-08-30 15:52
閱讀 584·2019-08-30 12:54
閱讀 1607·2019-08-29 15:10
閱讀 2748·2019-08-29 12:44
閱讀 3068·2019-08-29 12:28
閱讀 3418·2019-08-27 10:57
閱讀 2286·2019-08-26 12:24