Azure SignalR Service 內部項目
Azure SignalR Service 建置在 ASP.NET Core SignalR 架構之上。 其也支援 ASP.NET SignalR,方法是在 ASP.NET Core 架構之上重新實作 ASP.NET SignalR 的資料通訊協定。
只要變更幾行程式碼,您就可以輕鬆地移轉本地的 ASP.NET Core SignalR 或 ASP.NET SignalR 應用程式,從而與 SignalR Service 搭配運作。
此圖說明搭配使用 SignalR Service 與應用程式伺服器時的典型架構。
另外,我們也會討論其與自我裝載的 ASP.NET Core SignalR 應用程式有何不同。
應用程式伺服器連線
自我裝載的 ASP.NET Core SignalR 應用程式伺服器會直接接聽並連接用戶端。
使用 SignalR Service 後,應用程式伺服器就不會再接受持續性的用戶端連線,而是改採取下列行為:
- Azure SignalR Service SDK 會針對每個中樞公開
negotiate
端點。 - 端點會回應用戶端交涉要求,並將用戶端重新導向至 SignalR Service。
- 用戶端會連線到 SignalR Service。
如需詳細資訊,請參閱用戶端連線。
一旦應用程式伺服器啟動後:
- 針對 ASP.NET Core SignalR:Azure SignalR Service SDK 會針對每一個中樞開啟五個連往 SignalR Service 的 WebSocket 連線。
- 針對 ASP.NET SignalR:Azure SignalR Service SDK 會針對每個中樞開啟五個 WebSocket 連線至 SignalR Service,而每個應用程式一個 WebSocket 連線。
初始連線數目預設為 5,並可使用 SignalR Service SDK 中的 InitialHubServerConnectionCount
選項進行設定。 如需詳細資訊,請參閱組態。
當應用程式伺服器連線到 SignalR 服務時,Azure SignalR 服務會將負載平衡訊息傳送至伺服器。 然後,SDK 會新增與服務的伺服器連線以提升效能。 進出用戶端的訊息會以多工方式傳送至這些連線。
伺服器連線會持續連線到 SignalR Service。 如果因為網路問題而導致伺服器連線中斷:
- 此伺服器連線提供的所有用戶端都會中斷連線。 如需詳細資訊,請參閱用戶端與伺服器之間的資料傳輸。
- 伺服器會自動重新連線至用戶端。
用戶端連接
當您使用 SignalR Service 時,用戶端會連線至服務,而不是應用程式伺服器。 在用戶端與 SignalR Service 之間建立持續性連線需要三個步驟。
用戶端會將交涉要求傳送至應用程式伺服器。
應用程式伺服器會使用 Azure SignalR Service SDK 傳回包含 SignalR Service 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>" }
- 如果是 ASP.NET Core SignalR,典型的重新導向回應會類似:
用戶端收到重新導向回應之後,便會使用該 URL 和存取權杖來連線到 SignalR Service。
若想了解 ASP.NET Core SignalR,請參閱傳輸通訊協定。
用戶端與伺服器之間的資料傳輸
當用戶端連線至 SignalR Service 時,服務執行階段會尋找伺服器連線來為此用戶端提供服務。
- 此步驟只會進行一次,而且是用戶端與伺服器連線之間的一對一對應。
- 此對應會保留在 SignalR Service 上,直到用戶端或伺服器中斷連線。
此時,應用程式伺服器便會收到事件,其中會有來自新用戶端的資訊。 應用程式伺服器中會建立連往用戶端的邏輯連線。 系統會透過 SignalR Service 建立從用戶端至應用程式伺服器的資料通道。
SignalR Service 會將資料從用戶端傳輸到配對的應用程式伺服器。 來自應用程式伺服器的資料則會傳送至對應的用戶端。
SignalR Service 不會儲存客戶資料,接收的所有客戶資料都會即時傳輸至目標伺服器或用戶端。
Azure SignalR Service 會作為應用程式伺服器與用戶端之間的邏輯傳輸層。 所有的持續性連線都會卸載至 SignalR Service。 因此,應用程式伺服器只需要處理中樞類別中的商務邏輯,而不必擔心用戶端連線。
下一步
若要深入了解 Azure SignalR SDK,請參閱: