Azure SignalR Service 內部

Azure SignalR 服務是以 ASP.NET Core SignalR 架構為基礎所建置。 它也支援 ASP.NET SignalR,方法是在 ASP.NET Core 架構之上重新實作 ASP.NET SignalR 的資料通訊協定。

您可以藉由變更幾行程式碼,輕鬆地移轉本機 ASP.NET Core SignalR 或 ASP.NET SignalR 應用程式,以使用 SignalR 服務。

此圖描述當您搭配應用程式伺服器使用 SignalR Service 時的典型架構。

也會討論自我裝載 ASP.NET Core SignalR 應用程式的差異。

Architecture

應用程式伺服器連線

自我裝載 ASP.NET Core SignalR 應用程式伺服器會接聽用戶端並直接連線。

使用 SignalR Service 時,應用程式伺服器不再接受持續性用戶端連線,而是:

  1. negotiate每個中樞的 Azure SignalR Service SDK 都會公開端點。
  2. 端點會回應用戶端交涉要求,並將用戶端重新導向至 SignalR Service。
  3. 用戶端會連線到 SignalR 服務。

如需詳細資訊,請參閱 用戶端連線

啟動應用程式伺服器之後:

  • 針對 ASP.NET Core SignalR:Azure SignalR 服務 SDK 會針對每個中樞開啟五個 WebSocket 連線至 SignalR 服務。
  • 針對 ASP.NET SignalR:Azure SignalR Service SDK 會針對每個中樞開啟五個 WebSocket 連線至 SignalR 服務,以及每個應用程式一個 WebSocket 連線。

初始連線數目預設為 5,並使用 SignalR Service SDK 中的 選項進行設定 InitialHubServerConnectionCount 。 如需詳細資訊,請參閱設定

當應用程式伺服器連線到 SignalR 服務時,Azure SignalR 服務可能會將負載平衡訊息傳送至伺服器。 然後,SDK 會啟動與服務的新伺服器連線,以提升效能。 來自用戶端的訊息會多工處理到這些連線。

伺服器連線會持續連線到 SignalR 服務。 如果伺服器連線因為網路問題而中斷連線:

  • 此伺服器連線中斷連線所提供的所有用戶端。 如需詳細資訊,請參閱 用戶端與伺服器 之間的資料傳輸。
  • 伺服器會自動重新連線用戶端。

用戶端連接

當您使用 SignalR 服務時,用戶端會連線到服務,而不是應用程式伺服器。 在用戶端與 SignalR 服務之間建立持續性連線有三個步驟。

  1. 用戶端會將交涉要求傳送至應用程式伺服器。

  2. 應用程式伺服器會使用 Azure SignalR Service SDK 傳回包含 SignalR 服務 URL 和存取權杖的重新導向回應。

    • 針對 ASP.NET Core SignalR,典型的重新導向回應看起來如下:
      {
          "url":"https://test.service.signalr.net/client/?hub=chat&...",
          "accessToken":"<a typical JWT token>"
      }
      
    • 對於 ASP.NET SignalR,典型的重新導向回應如下所示:
      {
          "ProtocolVersion":"2.0",
          "RedirectUrl":"https://test.service.signalr.net/aspnetclient",
          "AccessToken":"<a typical JWT token>"
      }
      
  3. 用戶端收到重新導向回應之後,它會使用 URL 和存取權杖來連線到 SignalR 服務。

若要深入瞭解核心 SignalR ASP.NET,請參閱 傳輸通訊協定

用戶端與伺服器之間的資料傳輸

當用戶端連線到 SignalR 服務時,服務執行時間會尋找伺服器連線來提供此用戶端。

  • 此步驟只會執行一次,而且是用戶端與伺服器連線之間的一對一對應。
  • 在 SignalR Service 中維護對應,直到用戶端或伺服器中斷連線為止。

此時,應用程式伺服器會收到具有新用戶端資訊的事件。 應用程式伺服器中會建立用戶端的邏輯連線。 資料通道會透過 SignalR Service 從用戶端到應用程式伺服器建立。

SignalR Service 會將資料從用戶端傳輸到配對應用程式伺服器。 來自應用程式伺服器的資料會傳送至對應的用戶端。

SignalR Service 不會儲存或儲存客戶資料,所有收到的客戶資料都會即時傳輸至目標伺服器或用戶端。

Azure SignalR 服務可作為應用程式伺服器與用戶端之間的邏輯傳輸層。 所有持續性連線都會卸載至 SignalR Service。 因此,應用程式伺服器只需要處理中樞類別中的商務邏輯,而不必擔心用戶端連線。

下一步

若要深入瞭解 Azure SignalR SDK,請參閱: