溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

WebSocket和SocketIO以及SignalR的作用以及用法是怎樣的

發(fā)布時(shí)間:2021-09-18 15:35:44 來源:億速云 閱讀:474 作者:柒染 欄目:編程語言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)WebSocket和SocketIO以及SignalR的作用以及用法是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

WebSocket是什么

WebScoket是一種讓客戶端和服務(wù)器之間能進(jìn)行雙向?qū)崟r(shí)通信的技術(shù)。它是HTML最新標(biāo)準(zhǔn)HTML5的一個(gè)協(xié)議規(guī)范,本質(zhì)上是個(gè)基于TCP的協(xié)議,它通過HTTP/HTTPS協(xié)議發(fā)送一條特殊的請(qǐng)求進(jìn)行握手后創(chuàng)建了一個(gè)TCP連接,此后瀏覽器/客戶端和服務(wù)器之間便可以通過此連接來進(jìn)行雙向?qū)崟r(shí)通信。

為什么要用WebSocket

1)一直以來,HTTP協(xié)議是無狀態(tài)、單向通信的,即客戶端請(qǐng)求一次,服務(wù)器回復(fù)一次。如果想讓服務(wù)器消息及時(shí)下發(fā)到客戶端,需要采用類似于輪詢的機(jī)制,即客戶端定時(shí)頻繁的向服務(wù)器發(fā)出請(qǐng)求,這樣效率很低,而且HTTP數(shù)據(jù)包頭本身的字節(jié)量較大,浪費(fèi)了大量帶寬和服務(wù)器資源;

2)為提高效率,出現(xiàn)了AJAX/Comet技術(shù),它實(shí)現(xiàn)了雙向通信且節(jié)省了一定帶寬,但仍然需要發(fā)出請(qǐng)求,本質(zhì)上仍然是輪詢;

3)新一代HTML標(biāo)準(zhǔn)HTML5推出了WebSocket技術(shù),它使客戶端和服務(wù)器之間能通過HTTP協(xié)議建立TCP連接,之后便可以隨時(shí)隨地進(jìn)行雙向通信,且交換的數(shù)據(jù)包頭信息量很小;

如何使用WebSocket

在支持WebSocket的瀏覽器中,創(chuàng)建Socket之后,通過onopen、onmessage、onclose、onerror四個(gè)事件的實(shí)現(xiàn)來處理Socket的響應(yīng);

WebSocket和HTTP、TCP的關(guān)系

WebSocket和HTTP都屬于應(yīng)用層協(xié)議,且都是基于TCP的,它們的send函數(shù)最終也是通過TCP系統(tǒng)接口來做數(shù)據(jù)傳輸。那么WebSocket和HTTP的關(guān)系呢?WebSocket在建立握手連接時(shí),數(shù)據(jù)是通過HTTP協(xié)議傳輸?shù)?,但是在連接建立后,真正的數(shù)據(jù)傳輸階段則不需要HTTP協(xié)議的參與。它們之間的關(guān)系如下圖:

什么情況下使用WebSocket

如果游戲需要同時(shí)支持手機(jī)端、Web端,那毫無疑問應(yīng)該使用WebSocket,現(xiàn)在各個(gè)平臺(tái)都提供了相應(yīng)的WebSocket實(shí)現(xiàn)。如果游戲不需要支持Web端,且對(duì)實(shí)時(shí)性要求比較高,如多人射擊、MMORPG之類,那么使用TCP/UDP結(jié)合的原生Socket會(huì)比較好。

SocketIO是什么

WebSocket是HTML5最新提出的規(guī)范,雖然主流瀏覽器都已經(jīng)支持,但仍然可能有不兼容的情況,為了兼容所有瀏覽器,給程序員提供一致的編程體驗(yàn),SocketIO將WebSocket、AJAX和其它的通信方式全部封裝成了統(tǒng)一的通信接口,也就是說,我們在使用SocketIO時(shí),不用擔(dān)心兼容問題,底層會(huì)自動(dòng)選用最佳的通信方式。因此說,WebSocket是SocketIO的一個(gè)子集。

SocketIO項(xiàng)目使用需要注意事項(xiàng)

WebSocket和SocketIO以及SignalR的作用以及用法是怎樣的

說簡單一點(diǎn),就是如果使用Socket.IO那么你的客戶端和服務(wù)端都必須使用基于它的一套解決方案,這個(gè)限制有點(diǎn)太可怕了!

但是.NET是否有一套基于Socket.IO實(shí)現(xiàn)的解決方案呢?

答案是肯定的:

SocketIOSharp

https://github.com/uhm0311/SocketIOSharp

.NET項(xiàng)目我們該如何選擇實(shí)時(shí)通信框架呢?

不太推薦大家使用Socket.IO來作為項(xiàng)目中來實(shí)現(xiàn)實(shí)時(shí)通信的解決方案,因?yàn)槲④浗o我們提供了更強(qiáng)大更好的全家桶!ASP.NET Core要么使用原生的Websocket,要么使用SignalR吧!

SignalR是什么

ASP.NET SignalR 是為 ASP.NET 開發(fā)人員提供的一個(gè)庫,可以簡化開發(fā)人員將實(shí)時(shí) Web 功能添加到應(yīng)用程序的過程。實(shí)時(shí) Web 功能是指這樣一種功能:當(dāng)所連接的客戶端變得可用時(shí)服務(wù)器代碼可以立即向其推送內(nèi)容,而不是讓服務(wù)器等待客戶端請(qǐng)求新的數(shù)據(jù)。WebSockets是HTML5提供的新的API,可以在Web網(wǎng)頁與服務(wù)器端間建立Socket連接,當(dāng)WebSockets可用時(shí)(即瀏覽器支持Html5)SignalR使用WebSockets,當(dāng)不支持時(shí)SignalR將使用其它技術(shù)來保證達(dá)到相同效果。

WebSocket和SocketIO以及SignalR的作用以及用法是怎樣的

上述就是小編為大家分享的WebSocket和SocketIO以及SignalR的作用以及用法是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI