什麼是SignalR?
ASP.NET SignalR是為簡化開發開發人員將實時web內容添加到應用程序過程而提供的類庫。實時web功能指 的是讓服務器代碼可以隨時主動推送內容給客戶端,而不是讓服務器等待客戶端的請求(才返回內容)。
所有"實時"種類的web功能都可以使用SignalR來添加到你的ASP.NET應用程序中。最常用的例子 有聊天室,但我們能做的比這要多得多。考慮以下情況:用戶需要不停的刷新網頁來看最新的數據;或者在頁 面上通過實現長輪詢來檢索新數據(並顯示),那你就可以考慮使用SignalR來實現了。比如:儀表板及監視 型應用程序;協作型應用程序(如多人同時對文檔進行編輯);作業進度更新及實時呈現表單等。
SignalR也適合新型的,需要從服務器上進行高頻率更新的web應用程序,例如實時游戲。這裡有一個好例 子:ShoorR。
SignalR提供了一個簡單的API用戶創建服務器到客戶端的遠程過程調用(RPC),可以方便地從服務器端 的.Net代碼中對客戶端浏覽器及其他客戶端平台中的的JS函數進行調用。SignalR還包括了用於管理連接(例 如:連接和斷開事件)及連接分組。
SignalR可以自動對連接進行管理。並讓你發送廣播消息到所有已連接的客戶端上,就像一個聊天室一樣。 當然除了群發外,你也可以發送到消息到特定的客戶端。客戶端和服務器的連接是持久的,不像傳統的每次通 信都需要重新建立連接的HTTP協議。
SignalR支持“服務器推送”功能,即服務器代碼可以通過使用遠程過程調用(RPC)來調用浏覽 器中的客戶端代碼,而不是當前在web上常用的請求-相應處理模型。
SignalR的應用可以使用服務總線,SQL SERVER或者Redis來擴展到數以千計的客戶端上。
SignalR是開源的,你可以通過GitHub訪問。
SignalR和WebSocket
SignalR使用WebSocket傳輸方式——在可能的情況下。並且會自動切換到舊的傳輸方式(如 HTTP長連接)。你當然可以直接使用WebSocket來編寫你的應用程序,但使用SignalR意味著你將有更多的額外 功能而無需重新發明輪子。最重要的是,你可以將注意力關注在業務實現上,而無需考慮為舊的客戶端單獨創 建兼容代碼。SignalR還能夠使你不必擔心WebSocket的更新,因為SignalR將會持續更新以支持變化的底層傳 輸方式,跨不同版本的WebSocket來為應用程序提供一個一致的訪問接口。
當然,你可以創建只使用WebSocket傳輸的解決方案,SignalR提供了你可能需要自行編寫代碼的所有功能 ,比如回退到其他傳輸方式及針對更新的WebSocket實現來修改你的應用程序。