您好,登錄后才能下訂單哦!
本篇內容介紹了“ASP.NET SignalR是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
介紹SignalR
ASP.NET SignalR 是一個為 ASP.NET 開發人員的庫,簡化了將實時 web 功能添加到應用程序的過程。實時Web功能使服務端代碼推送內容到鏈接可客服端并立即應用成為可能,而不需要服務端等待客戶端去請求數據。
SignalR可用于任何你想添加實時Web功能到ASP.NET應用程序的情形,聊天室是一個常用的例子,用戶可以刷新Web頁面來獲得新的數據,或者頁面使用一個長輪詢來取回數據,這都是SignalR可以應用的場景。比如說儀表盤和監視系統,實時游戲等。
SignalR支持以一種簡單的API來創建服務器到客戶端的遠程調用客戶端的Javascript方法,SignalR還包括用于用于連接管理的API和分組連接。
SignalR自動的處理連接管理,并允許你像一個聊天室那樣同時向所有連接的客戶端廣播消息,你也可以向特定的客戶端發送消息,在客戶端和服務器之間的連接是持久的,不需要像傳統的HTTP連接那樣重建每一個連接。
SignalR支持服務器推送功能,在服務器中可以調用在瀏覽器中的客戶端代碼,而不是像當今的“請求-響應”模式。
SignalR可以通過服務總線擴展到數以千計的客戶端,同時SignalR是開源的,可以用過Github訪問到。
SignalR當WebSocket可用時優先使用新式的WebSocket傳輸,同時也兼容老式的傳輸。雖然你可以立刻使用WebSocket編寫你的應用程序,但是使用SignalR意味著你可以獲得本來需要你自己去實現的很多擴展方法,最重要的是,你可以直接使用SignalR編寫利用WebSocket的代碼,而不必擔心還要為舊的客戶端提供支持。同時你也不必擔心WebSocket的更新,因為SignalR會持續的更新來支持基礎的傳輸協議,提供對不同版本的WebSocket的統一接口支持。
雖然你可以單獨使用WebSocket創建你的解決方案,但是SignalR支持所有你需要自己去編寫的方法,比如支持其他修訂版的功能。
SignalR是對一些服務器和客戶端之間實時協作傳輸的抽象化,一個SignalR連接作為一個HTTP開始,但是如果WebSocket是可用的將得到利用。WebSocket是SignalR理想的傳輸方法,它能高效的利用服務端存儲,擁有最少的延遲,而且擁有最基礎的功能(比如全雙工通信),但是它也同時又嚴格的要求:WebSocket必須要求服務器使用Windows Server 2012或者windows 8,使用.NET Framework 4.5框架,如果沒有達到這些條件,SignalR將試圖使用其他的傳輸來創建連接。
這些傳輸依賴于對HTML5的支持,假如客戶端不支持HTML5標準,講使用老式的傳輸協議:
WebSocket:(如果客戶端可服務器端都支持WebSocket)。WebSocket是唯一一個建立客戶端和服務器端在真正的持久的雙工的傳輸協議,但是同時WebSocket也擁有嚴格的要求,它只在最新版本的IE、chrome和FireFox得到支持,在像Opera和Safari這些瀏覽器中得到的一部分的實現。
服務器發送事件:也稱為事件源。基本上除了IE以外都支持事件源。
以下的傳輸協議是基于Comet web應用程序模型的,在客戶端瀏覽器或者其他客戶端維持一個長期持久的HTTP請求,服務器端使用它推送數據而無需客戶端單獨請求。
持久型框架(Forever Frame):(僅限于IE)持久型框架創建一個隱藏的IFrame,用它來創建一個在服務器終結點不結束的請求,服務器端可以持續不斷的發送到客戶端執行腳本,一次來支持一個單向的從服務器端到客戶端的實時連接。這個鏈接使用了與客戶端請求服務器端不同的連接,像一個標準的HTTP請求,為每個需要發送的數據創建新的連接。
AJAX長輪詢(Ajax long polling),長輪詢不創建持久的連接,取而代之的是
直到服務器另一端有反饋,在向開放的服務器發送請求,此時需要馬上建立新的鏈接
下面列表顯示了SignalR選擇傳輸協議的過程:
1.如果瀏覽器是IE8或者更老的版本,使用長輪詢;
2.如果配置了JSONP(當連接開始的時候設置jsonp參數為true),使用長輪詢;
3.如果正在創建跨域的連接(如果SignalR終結點不和頁面上的地址相同),如果以下條件符合將使用WebSocket:
客戶端支持CORS(了解詳細情況,請點擊這里)
客戶端支持WebSocket
服務器端支持WebSocket
4。如果JSONP沒有被配置并且連接不是跨域的,如果客戶端和服務器端都支持WebSocket,將使用WebSocket;
5.假如客戶端和服務器端都不支持WebSocket,盡量使用事件源;
6.如果服務器端不支持事件源,使用持久型框架;
7.如果持久型框架也失敗,使用長輪詢。
你可以決定是否在總線上打開日志記錄,打開瀏覽器的控制臺窗口。
要啟動你在瀏覽器的總線事件,請將以下命令添加到客戶端應用程序中:
在IE中,按F12打開開發人員工具,點擊“控制臺”標簽頁。
在Chrome中,使用組合鍵Ctrl+Shift+J打開控制臺
協商傳輸協議需要一定的時間和服務器客戶端資源,如果客戶端可以預知到,那么傳輸協議可以在連接開始的時候指定,以下代碼通過一個簡短的示例開啟一個使用AJAX長輪詢的連接,如果它已知客戶端不支持其他任何的協議:
connection.start({ transport: 'longPolling' });
你也可以指定一個回調順序讓客戶端去嘗試指定傳輸協議:
connection.start({ transport: ['webSockets','longPolling'] });
以下是定義的用于指定傳輸協議的字符串:
webSockets
foreverFrame
serverSentEvents
longPolling
SignalR API包含兩種服務器端和客戶端的通信模型:持久連接和總線.
一個連接表示單個收件人、編組或者廣播消息發送一個簡單的終結點。持久化連接API賦予程序員直接訪問SignalR提供的底層通信協議的能力,使用連接通信模型類似于程序員使用像WCF那樣基于連接的API。
總線是更高級別的管道,他是建立在基于連接的API上,允許客戶端和服務器彼此直接調用方法。SignalR神奇的處理在跨越機器的調度,讓客戶端調用服務器端代碼像調用本地方法那樣簡單,反之亦然。使用總線通信模型類似于使用.NET Remoting這樣的遠程調用API,使用Backplane允許你將強類型的參數傳給方法,進行模型綁定。
“ASP.NET SignalR是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。