SignalR簡介

来源:https://www.cnblogs.com/net-yuan/archive/2018/12/17/SignalR.html
-Advertisement-
Play Games

什麼是SignalR? ASP.NET SignalR是ASP.NET開發人員的庫,它簡化了嚮應用程式添加實時Web功能的過程。實時Web功能是指伺服器代碼在連接的客戶端可用時立即將內容推送到連接的客戶端,而不是讓伺服器等待客戶端請求新數據。 SignalR可用於向ASP.NET應用程式添加任何類型 ...


什麼是SignalR?

ASP.NET SignalR是ASP.NET開發人員的庫,它簡化了嚮應用程式添加實時Web功能的過程。實時Web功能是指伺服器代碼在連接的客戶端可用時立即將內容推送到連接的客戶端,而不是讓伺服器等待客戶端請求新數據。

SignalR可用於向ASP.NET應用程式添加任何類型的“實時”Web功能。雖然聊天經常被用作示例,但您可以做更多的事情。每當用戶刷新網頁以查看新數據,或者頁面實現長輪詢以檢索新數據時,它都是使用SignalR的候選者。示例包括儀錶板和監視應用程式,協作應用程式(如同時編輯文檔),作業進度更新和實時表單。

SignalR還支持全新類型的Web應用程式,這些應用程式需要來自伺服器的高頻更新,例如實時游戲。

SignalR提供了一個簡單的API,用於創建從伺服器端.NET代碼調用客戶端瀏覽器(和其他客戶端平臺)中的JavaScript函數的伺服器到客戶端遠程過程調用(RPC)。SignalR還包括用於連接管理的API(例如,連接和斷開事件)以及分組連接。

SignalR自動處理連接管理,並允許您同時向所有連接的客戶端廣播消息,如聊天室。您還可以向特定客戶端發送消息。客戶端和伺服器之間的連接是持久的,不像傳統的HTTP連接,它是為每次通信重新建立的。

SignalR支持“伺服器推送”功能,其中伺服器代碼可以使用遠程過程調用(RPC)調用瀏覽器中的客戶端代碼,而不是當今Web上常見的請求 - 響應模型。

SignalR應用程式可以使用Service Bus,SQL Server或Redis擴展到數千個客戶端。

SignalR是開源的,可通過GitHub訪問。

SignalR和WebSocket

SignalR在可用的情況下使用新的WebSocket傳輸,併在必要時回退到舊的傳輸。雖然您當然可以直接使用WebSocket編寫應用程式,但使用SignalR意味著您需要實現許多額外的功能。最重要的是,這意味著您可以編寫應用程式代碼以利用WebSocket,而無需擔心為舊客戶端創建單獨的代碼路徑。SignalR還使您不必擔心WebSocket的更新,因為SignalR已更新以支持底層傳輸的更改,從而為您的應用程式提供跨WebSocket版本的一致界面。

傳輸和回退

SignalR 是一種抽象,通過某些要求進行客戶端和伺服器之間的實時工作的傳輸。 SignalR 連接作為 HTTP,啟動,然後升級到 WebSocket 連接是否可用。 WebSocket 是 SignalR 的理想之選傳輸,因為它使伺服器記憶體的最有效地使用,具有最低的延遲,並且具有最基本功能 (如完整雙工客戶端和伺服器之間的通信),但它還具有最嚴格要求: WebSocket 要求要使用 Windows Server 2012 或 Windows 8 和.NET Framework 4.5 的伺服器。 如果不滿足這些要求,SignalR 將嘗試使用其他傳輸以其連接。

HTML 5傳輸

這些傳輸依賴於對HTML 5的支持。如果客戶端瀏覽器不支持HTML 5標準,則將使用舊的傳輸。

WebSocket(如果伺服器和瀏覽器都表明它們可以支持Websocket)。WebSocket是唯一一種在客戶端和伺服器之間建立真正持久的雙向連接的傳輸。但是,WebSocket也有最嚴格的要求; 它僅在最新版本的Microsoft Internet Explorer,Google Chrome和Mozilla Firefox中得到完全支持,並且僅在Opera和Safari等其他瀏覽器中部分實現。
伺服器發送事件,也稱為EventSource(如果瀏覽器支持伺服器發送事件,基本上是除Internet Explorer之外的所有瀏覽器。)

Comet 傳輸

基於以下傳輸Comet web 應用程式模型中,瀏覽器或其他客戶端維護伺服器可以用於將數據推送到客戶端不使用客戶端專門的長時間持有 HTTP 請求請求它。
永久幀(適用於 Internet Explorer)。 永久幀創建隱藏的 IFrame 的未完成的伺服器上的終結點向發出請求。 伺服器然後不斷會腳本發送到客戶端立即執行,提供從伺服器到客戶端的單向實時連接。 從客戶端與伺服器的連接使用單獨的連接從伺服器到客戶端連接和像標準的 HTTP 請求,為每個條需要發送的數據創建新的連接。
Ajax 長輪詢。 長輪詢不創建持久性連接,但改為輪詢具有保持打開狀態直到伺服器做出響應,此時將關閉連接,並立即請求新的連接的請求的伺服器。 連接重置時,這可能會造成一些延遲。
有關哪些傳輸受支持的配置下的詳細信息,請參閱支持的平臺。

傳輸選擇過程

以下列表顯示 SignalR 使用來確定使用哪個傳輸的步驟。

  1. 如果瀏覽器是 Internet Explorer 8 或更早版本,則使用長輪詢。
  2. 如果配置 JSONP (即jsonp參數設置為true啟動連接時),使用長輪詢。
  3. 如果操作正在進行的跨域連接,(即,如果 SignalR 終結點不在托管的頁面所在的域中),然後 WebSocket 將在滿足以下條件:
  • 客戶端支持 CORS (跨域資源共用)。 在其的客戶端支持 CORS 的詳細信息,請參閱CORS 在 caniuse.com。
  • 客戶端支持 WebSocket
  • 伺服器支持 WebSocket
    如果不滿足任何這些條件,則將使用長輪詢。 有關跨域連接的詳細信息,請參閱如何建立跨域連接。
  1. 如果未配置 JSONP 並且連接不跨域,如果客戶端和伺服器支持它,則將使用 WebSocket。
  2. 如果客戶端或伺服器不支持 WebSocket,如果可用,則使用伺服器發送事件。
  3. 如果伺服器發送事件不可用,請嘗試使用永久幀。
  4. 如果永久幀失敗,則使用長輪詢。

監視傳輸

您可以確定應用程式在中心上的日誌記錄和在瀏覽器中打開控制台視窗,從而使用什麼傳輸。
若要啟用瀏覽器中的中心的事件日誌記錄,客戶端應用程式中添加以下命令:

$.connection.hub.logging = true;
  • 在 Internet Explorer 中,通過按 F12 打開開發人員工具,並單擊控制台選項卡。
  • 在Chrome中,按Ctrl + Shift + J打開控制台。
  • 打開控制台並啟用日誌記錄後,您將能夠看到SignalR正在使用哪種傳輸。

指定在傳輸協議

協商傳輸只占用一定的時間和客戶端/伺服器的資源。 如果已知的客戶端功能,則傳輸可以指定啟動客戶端連接時。 下麵的代碼段演示如何啟動使用 Ajax 長輪詢傳輸方式,因為如果它已知客戶端不支持任何其他協議將使用的連接:
connection.start({ transport: 'longPolling' });
如果你想要嘗試按順序的特定傳輸的客戶端,可以指定回退的順序。 下麵的代碼段演示嘗試 WebSocket,並且如果沒有問題,,直接轉到長輪詢。
connection.start({ transport: ['webSockets','longPolling'] });

用於指定傳輸中的字元串常數定義,如下所示:

  • webSockets
  • foreverFrame
  • serverSentEvents
  • longPolling

    連接和集線器

    SignalR API 包含客戶端和伺服器之間進行通信的兩個模型: 永久連接和中心。
    連接表示用於發送單個收件人、 分組或廣播消息的簡單終結點。 開發人員直接訪問 SignalR 公開低級別通信協議 (由 PersistentConnection 類的.NET 代碼中表示) 的持久性連接 API 提供。 使用連接的通信模型都會熟悉的開發人員已使用基於連接的 Api,如 Windows Communication Foundation。
    中心是基於連接 API,從而使您的客戶端和伺服器直接相互調用方法的更多高級管道。 SignalR 處理跨電腦界限調度像變魔術一樣,是通過允許客戶端在伺服器上調用方法,以輕鬆地為本地方法,反之亦然。 使用中心的通信模型都會熟悉的開發人員已使用遠程調用 Api,如.NET 遠程處理。 使用中心還允許您將強類型化的參數傳遞給方法,使模型綁定。

體繫結構關係圖

下圖顯示了中心、 永久連接和用於傳輸的基礎技術之間的關係。

中心的工作原理

伺服器端代碼在客戶端上調用的方法時發送一個數據包,在活動傳輸包含名稱和要調用的方法的參數 (作為方法參數發送一個對象,它使用 JSON 序列化)。 然後,客戶端匹配到客戶端代碼中定義的方法的方法名稱。 如果沒有匹配項,將使用反序列化的參數數據執行客戶端方法。
可以使用像這樣的工具監視方法調用Fiddler。 下圖顯示了從 SignalR 伺服器發送到 web 瀏覽器客戶端在 Fiddler 日誌窗格中的方法調用。 方法調用從集線器調用發送MoveShapeHub,並正在調用的方法稱為updateShape。

顯示SignalR交通的提琴手日誌看法

在此示例中,使用H參數標識集線器名稱; 使用M參數標識方法名稱,並使用參數標識發送到方法的A數據。生成此消息的應用程式是在高頻實時教程中創建的。

選擇通信模型

大多數應用程式應使用中心 API。 可在以下情況下使用連接 API:

  • 需要指定將發送的實際消息的格式。
  • 開發人員傾向於使用消息傳送與調度模型而不是遠程調用模型。
  • 使用消息傳送模型的現有應用程式移植以使用 SignalR。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 感謝! 承蒙關照~ 中的 簡介筆記 簡介 1. 基本概念 2. 項目搭建 使用 進行開發 實現數據綁定和文件上傳 是開發 架構的通用方式. 前端控制器, 到`Controller View template`,用戶頁面. 前端控制器 前端控制器用於分發調度,而控制器用於業務數據抽取, 用於頁面 ...
  • #####認證組件##### 一、認證是什麼就不說了,某些網頁必須是用戶登陸之後,才能訪問的,所以這時候就需要用上認證組件。 你不用rest_framework的認證組件也行,這種認證的話,完全可以自己寫出來。 二、之前再寫APIView的時候,那裡提到過。 不記得在哪裡的話,先找dispatch方... ...
  • JAVA裝箱和拆箱 從Java SE5開始就提供了自動裝箱的特性,如果要生成一個數值為10的Integer對象,只需要這樣就可以了。原文鏈接: http://www.cnblogs.com/dolphin0520/p/3780005.htmlInteger i = 10; //裝箱int n = i ...
  • org.eclipse.jetty.webapp 包下的 StandardDescriptorProcessor類。該類對象會在WebAppContext的doStart方法啟用 註冊了遍歷web.xml中的元素中的方法,後續會用反射機制來調用這些方法。比如filter元素用visitFilter處 ...
  • 與Asp.Net Mvc創建區域的時候會自動為你創建區域路由方式不同的是,Asp.Net Core下需要自己手動做一些配置,但更靈活了 ...
  • 前言 這兩天群里一直有群友問一些關於FastReport的問題,結合他們的問題,在這裡做一個整理,有不明白的可以加 FastReport 交流群 群 號:554714044 工具 VS2017 +FastReport 開始 1.新建項目,添加三個按鈕。預覽、設計、列印 2.添加FastReport ...
  • 一、背景 IdentityServer4的介紹將不再敘述,百度下可以找到,且官網的快速入門例子也有翻譯的版本。然而發現關於它應用方面的文章介紹稍微欠缺,所以這裡主要從Client應用場景方面介紹對IdentityServer4的應用。 首先簡要介紹ID Token和Access Token: Acc ...
  • 在本教程中使用的軟體版本 Visual Studio 2015 .NET 4.5 SignalR 版本 2 概述 本教程介紹了通過演示如何生成簡單的基於瀏覽器的聊天應用程式的 SignalR 開發。 將 SignalR 庫添加到空的 ASP.NET web 應用程式,創建一個中心類,用於將消息發送到 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...