什麼是 ASP.NET Core SignalR?

已完成

所有網際網路連線的應用程式都是由伺服器和用戶端組成。 用戶端依賴伺服器提供資料,其接收資料的主要機制是透過發出超文字傳輸通訊協定 (HTTP) 要求。 某些用戶端應用程式需要的資料經常變更。

ASP.NET Core SignalR 提供 API 來建立伺服器對用戶端的遠端程序呼叫 (RPC)。 RPC 會從伺服器端 .NET Core 程式碼叫用用戶端上的函式。 支援的平台有數個,每個都有自己的用戶端 SDK。 因此,RPC 呼叫所叫用的程式設計語言可能有所不同。

本單元可協助您熟悉與 SignalR 相關聯的常用術語。 在本單元中,您將了解伺服器應用程式和用戶端應用程式各自需要的 SignalR 元件。 此外,您也將了解各種雙工通訊機制。 SignalR 會封裝多個即時通訊協定,並簡化每個實作的複雜度。 如需詳細資訊,請參閱 ASP.NET Core SignalR 文件。

下列各節說明 SignalR 中使用的主要詞彙。

傳輸

SignalR 支援下列技術或傳輸,以處理即時通訊:

  1. WebSocket
  2. Sever-Sent 事件
  3. 長輪詢

此處列出傳輸順序表示其正常後援順序。 換句話說,WebSocket 的優先順序高於 Server-Sent 事件,而 Server-Sent 事件則優先於長時間輪詢,儘管可使用其中任一種傳輸。 SignalR 會自動選擇伺服器和用戶端功能內的最佳傳輸方法。 如需詳細資訊,請參閱 SignalR 傳輸通訊協定的官方規格。

伺服器

伺服器負責公開 SignalR 端點。 端點會對應至 HubHub<T> 子類別。 伺服器可以存在於內部部署、雲端提供者 (例如 Azure),或搭配使用 Azure SignalR Service。 伺服器會公開可從用戶端呼叫的兩種中樞方法,以及用戶端可以訂閱的事件。 這些會被視為遠端程序。

中樞

在 SignalR 中,中樞可用來在用戶端與伺服器之間進行通訊。 中樞是一種高層級的管線,可讓用戶端與伺服器彼此呼叫方法。 為此,SignalR 會自動處理跨電腦界限的分派。 您可以將中樞視為所有連線用戶端與伺服器之間的 Proxy。

通訊協定

SignalR 通訊協定是透過任何以訊息為基礎的傳輸方式進行雙向 RPC 的通訊協定。 連線中的任一方可以叫用另一方的程序,而程序可以傳回零或多個結果,也可以傳回錯誤。 SignalR 提供兩個內建的中樞通訊協定:

  • 以 JSON 為基礎的文字通訊協定,這是預設值。
  • MessagePack 為基礎的二進位通訊協定,建立的訊息通常會比 JSON 建立的訊息小。

若要使用 MessagePack 通訊協定,伺服器和用戶端都必須選擇進行設定,而且伺服器和用戶端都必須能夠支援此通訊協定。 另外還有第三種中樞通訊協定,稱為 BlazorPack,但專門與 Blazor-Server 應用程式搭配使用。 若沒有 Blazor-Server 裝載模型,就無法使用此通訊協定。 如需詳細資訊,請參閱 SignalR 中樞通訊協定的官方規格。

使用者

系統中的使用者可當作是個人,但也可以是群組的一部分。 訊息可以傳送至 群組,而且所有群組成員都會收到通知。 單一使用者可以從多個用戶端應用程式連線。 例如,相同的使用者可以使用行動裝置和網頁瀏覽器,並同時在這兩者上取得即時更新。

群組

群組是由一或多個連線組成。 伺服器可以建立群組、將連線新增至群組,以及從群組中移除連線。 群組具有指定的名稱,可作為其唯一識別碼。 群組可用作一種設定範圍的機制,以協助鎖定訊息的傳送目標。 亦即,即時功能只能傳送給具名群組內的使用者。

連線

連至中樞的連線會以唯一識別碼表示,此識別碼只有伺服器和用戶端知道。 每個中樞類型都存在單一連線。 每個用戶端都有連至伺服器的唯一連線。 亦即,單一使用者可以出現在多個用戶端上,但每個用戶端連線都有自己的識別碼。

用戶端

用戶端負責透過 HubConnection 物件建立與伺服器端點的連線。 中樞連線在每個目標平台中的表示方式如下:

如需詳細資訊,請參閱 ASP.NET Core SignalR 支援平台

成功啟動中樞連線執行個體時,訊息即可雙向自由流動。 使用者可以自由地將通知傳達給伺服器,並接收來自伺服器的通知。 用戶端是任何已連線的應用程式,例如網頁瀏覽器、行動應用程式或傳統型應用程式等等。