ASP.NET Core基於WebSocket實現消息推送實戰演練


一、課程介紹

很多網站為了實現推送技術,所用的技術都是 Ajax 輪詢。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP請求,然后由服務器返回最新的數據給客戶端的瀏覽器。這種傳統的模式帶來很明顯的缺點,即瀏覽器需要不斷的向服務器發出請求,然而HTTP請求可能包含較長的頭部,其中真正有效的數據可能只是很小的一部分,顯然這樣會浪費很多的帶寬等資源。

HTML5 定義的 WebSocket 協議,能更好的節省服務器資源和帶寬,並且能夠更實時地進行通訊。

今天我們要通過使用ASP.Net Core WebSocket技術來實現服務端向客戶端實時推送消息(Real-Push-Message)。

一句話總結今天我們實現的目標?

如何在ASP.NET Core中使用WebSocket技術來實現服務端向指定的客戶端實時推送消息。

廢話不多說,直接上干貨,我們不生產干貨,我們只是干貨的搬運工。

二、WebSocket介紹

WebSocket是HTML5中的協議,支持持久連接;而Http協議不支持持久連接。

WebSocket是HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協議。

WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在 WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。


主流瀏覽器對 HTML5 WebSocket 的支持情況  

三、ASP.NET Core基於WebSocket實現消息推送實戰演練

ASP.NET Core 中的 WebSocket 支持 | Microsoft Docs 
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets?view=aspnetcore-3.1

使用步驟:

1、配置中間件

安裝 Microsoft.AspNetCore.WebSockets 包。

在 Startup 類的 Configure 方法中添加 WebSocket 中間件:

app.UseWebSockets();

可配置以下設置:

KeepAliveInterval - 向客戶端發送“ping”幀的頻率,以確保代理保持連接處於打開狀態。

ReceiveBufferSize - 用於接收數據的緩沖區的大小。 高級用戶可能需要對其進行更改,以便根據數據大小調整性能。

var webSocketOptions =new WebSocketOptions()

{

    KeepAliveInterval = TimeSpan.FromSeconds(120),

    ReceiveBufferSize =4*1024};

};

   app.UseWebSockets(webSocketOptions);

2、接受 WebSocket 請求


 

3、ASP.NET Core中WebSocket接收消息

配置在請求生命周期(例如在UseRouting和UseEndpoints中間),檢查它是否是 WebSocket 請求並接受 WebSocket 請求。

AcceptWebSocketAsync 方法將 TCP 連接升級到 WebSocket 連接,並提供 WebSocket 對象。 使用 WebSocket 對象發送和接收消息。

WebSocket 請求可以來自任何 URL,但此示例代碼只接受 /messagePushHub路徑的請求。

4、ASP.NET Core中WebSocket發送消息


 

 

 

 

四、總結

在ASP.NET Core中對於大多數應用程序實現實時通訊的花,現在我們建議使用 SignalR,而不是原始 WebSocket。並且在大多數情況下,與使用原始 WebSocket 相比,SignalR 沒有顯著的性能缺點。

ASP.NET Core SignalR 是一個庫,可用於簡化向應用添加實時 Web 功能,它會優先盡可能地使用 WebSocket技術。SignalR 可為 WebSocket 不可用的環境提供傳輸回退。 它還可提供簡單的遠程過程調用應用模型。

如果大家感興趣, 可以學習一下阿笨的《ASP.NET Core基於SignalR實現消息推送實戰演練》課程。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM