什麼是 SignalR ?

有關於即時連線技術,無論在輪詢、長輪詢 或 WebSocket..等,持續連線所造成伺服器消耗與技術進入門檻常常讓工程師們感到苦惱。直至數年前 SignalR 的釋出,讓許多 .NET 開發人員相當興奮:它大幅低開發人員降進入即時技術門檻。至今,SignalR 成為受歡迎的即時連線技術其中之一,也在 Azure 上提供 SignalR 服務。

SignalR 主要提供一組 API,實作伺服器與瀏覽器之間的遠端程序呼叫。伺服器端是以 .NET 進行開發,而瀏覽器端是以 JavaScripts 為主。它會依據目前連線的瀏覽器,建立 長輪詢 或 WebScoket 連線,開發人員不需要對這塊進行處理,只需要處理邏輯部分即可。
SignalR  可能為「 ASP.NET SignalR」與「ASP.NET Core SignalR」
這篇文章撰寫時 ,Azure SignalR Service 目前只支援  ASP.NET Core SignalR


即時內容最常見的範例莫過於聊天室,當某位成員發送訊息,其他成員必須即時收到訊息。



為何要使用 Azure SignalR Service?

無論「 ASP.NET SignalR」或「ASP.NET Core SignalR」,你皆可以部署於自己的伺服器上,自行管理與維護。那為什麼要使用 Azure SignalR Service ? 最主要的一個原因在於簡單建立服務,其次為不需要處理效能、擴充、可用性與 IT 問題。另外,面對大量且持續的 WebSocket 可能需要 load balancer 作為解決方案,而透過 Azure SignalR Service 時,開發人員不需要擔心這個問題。



建立第一個 Azure SignalR Service

這個範例是建立一個簡單的回聲 (echo) 服務,本地端連結 Azure SignalR Service 後直接將你的訊息回傳給你,提供給你參考:
Step 1. 建立資源 → 輸入 SignalR Service → 點選建立
Step 2. 依序輸入 Resoruce Name、定用帳號、資源群組、位置與定價層,點選建立

Step 3. 開啟 Visual Studio 2017 → 新增專案 → 選擇 ASP.NET Core Web Application,我們將透過這個專案與 Azure SignalR Service 進行互動。
你也能直接下載我完成的範例進行測試:AzureSignalRSeviceExample


Step 4. 在 NuGet 內找到 Microsoft.Azure.SignalR  並進行安裝

Step 5. 開啟 .csproj 檔案,加入下列程式碼

Step 6. 在入口網站,我們開啟建立後的 SignalR 服務 → 複製連線字串

Step 7. 接著我們要加入連接資訊:右鍵點選專案 → Manager User Secrets → 在 secrets.json 加上剛才取得的連線字串。格式為:




Step 8.  接下來處理程式碼部分 (你可以參考我撰寫的範例:,可以掠過8-10步驟)。首先我們先開啟 Startup.cs,在 ConfigureServices 內加上:


Step 9. 在 Configure 內加上:


Step 10. 在 index.cshtml 上貼上此連結內的程式碼。
Step 11. 執行,在輸入框內輸入任意文字,Azure SignalR Service 會即時回覆你輸入的訊息:


參考資料

  1. 什麼是 Azure SignalR 服務 - Microsoft Docs
  2. Azure SignalR Service now generally available - Microsoft Blog
  3. 使用 Azure SignalR 服務調整 ASP.NET Core SignalR 應用程式 - Microsoft Docs