ASP.NET SignalR 2.0 入門指南
介紹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
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的支援,假如客戶端不支援HTML5標準,講使用老式的傳輸協議:
WebSocket:(如果客戶端可伺服器端都支援WebSocket)。WebSocket是唯一一個建立客戶端和伺服器端在真正的持久的雙工的傳輸協議,但是同時WebSocket也擁有嚴格的要求,它只在最新版本的IE、chrome和FireFox得到支援,在像Opera和Safari這些瀏覽器中得到的一部分的實現。
伺服器傳送事件:也稱為事件源。基本上除了IE以外都支援事件源。
comet transports
以下的傳輸協議是基於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,使用匯流排模型允許你將強型別的引數傳給方法,進行模型繫結。
體系結構關係圖
以下關係圖表示了匯流排、持久化連線和用於傳輸的基本技術間的關係:
相關文章
- SignalR 2 入門SignalR
- Asp.Net MVC2.0 Url 路由入門(轉)ASP.NETMVC路由
- ASP.Net Core 3.1 使用gRPC入門指南ASP.NETRPC
- ASP.NET SignalR增加Azure支援ASP.NETSignalR
- Zookeeper入門指南
- CPack 入門指南
- Docker 入門指南Docker
- numpy入門指南
- EOS 入門指南
- Vue 入門指南Vue
- RabbitMQ入門指南MQ
- Nginx入門指南Nginx
- Vagrant 入門指南
- React 入門指南React
- Flask 入門指南Flask
- gulp入門指南
- OSWorkFlow入門指南
- CouchDB 入門指南
- RxJava入門指南RxJava
- ODA入門指南
- MySQL 入門指南MySql
- Markdown入門指南
- Entity Framework Core 2.0 入門Framework
- KNIME快速入門指南
- Markdown快速入門指南
- CodeMirror入門指南
- GitHub Actions 入門指南Github
- RequireJS入門指南UIJS
- Vuex新手入門指南Vue
- Airflow使用入門指南AI
- 自學機器學習入門指南機器學習
- Maven入門指南(一)Maven
- Bash快速入門指南
- mongoDB 入門指南、示例MongoDB
- 資訊保安入門指南
- 《Gulp 入門指南》- 前言
- Firebug入門指南
- sap入門--操作指南