SignalR 是一個面向 ASP.NET 開發人員的庫,可簡化將實時 web 功能添加到應用程序的過程。 實時 web 功能是讓服務器代碼將內容推送到鏈接的客戶端當即可用,而不是讓服務器等待客戶端請求新數據的能力。html
SignalR 是一個集成的客戶端與服務器庫,基於瀏覽器的客戶端和基於 ASP.NET 的服務器組件能夠藉助它來進行雙向多步對話。 換句話說,該對話可不受限制地進行單個無狀態請求/響應數據交換;它將繼續,直到明確關閉。 對話經過永久鏈接進行,容許客戶端向服務器發送多個消息,並容許服務器作出相應答覆,值得注意的是,還容許服務器向客戶端發送異步消息。是一個徹底基於客戶及服務器端解決方案,它是以JS做爲客戶端和ASP.NET做爲服務端來建立這類的應用。html5
傳統HTTP採用的是你們熟知的「拉模式」,即客戶端發出的每次請求,服務端都是被動處理。此場景下客戶端是老大,很顯然只有一方主動,操做與處理起來就沒那麼完美。爲了能讓服務端也能主動,html5的出現讓這種變得可能,你們知道html5中有兩種主動模式。第一種叫作websockect,WebSockets是Html5提供的新的API,能夠在Web網頁與服務器端間創建Socket鏈接,它是基於tcp模式的雙工通信。還有一種叫作SSE,也就是客戶端來訂閱服務器的一種事件模型。在html5出來以前,若是要作到服務器主動,咱們只能採用變相的longpool和iframe流勉強實現。這就至關於要實現服務端的主動就有了4種方案。SignalR的出現是咱們每位開發者的福音。它對上面四種方案進行了高度的封裝,也就是說signalR會在這四種技術中根據瀏覽器和服務器設置採起最優的一種模式。git
對於.NET開發者的福音,.NET平臺爲咱們提供了一種簡潔高效智能的實時信息交互技術->SignalR,它集成了上述數種技術,並能根據配置自動或手動選擇其最佳應用。github
SignalR可用於將任何類型的"實時"web 功能添加到 ASP.NET 應用程序。 好比最經常使用的即時消息、聊天。 只要用戶刷新 web 頁面以查看新數據或頁面實現長輪詢若要檢索新數據,能夠考慮對它使用 SignalR。 包括儀表板和監視應用程序,協做應用程序 (如同時進行編輯的文檔),做業的進度更新到並實時窗體。web
SignalR還能夠用於須要高頻率從服務器中更新的全新類型weB應用程序,例如在線聊天、實時遊戲、天氣、股票信息更新等實時應用程序。chrome
SignalR 提供一個簡單的 API,用於建立從服務器端.NET 代碼中調用 JavaScript 函數在客戶端瀏覽器 (和其餘客戶端平臺) 的服務器到客戶端的遠程過程調用 (RPC)。 SignalR 還包括鏈接管理的 API (例如,鏈接和斷開鏈接事件),並對鏈接進行分組。瀏覽器
SignalR自動處理鏈接管理,並容許您同時將消息廣播到全部鏈接的客戶端,如聊天室。 還能夠將消息發送到特定的客戶端。 客戶端和服務器之間的鏈接是持久性的。服務器
SignalR與經常使用的Web瀏覽器上請求-響應模式不一樣,它支持"服務器推送"功能,能夠調用遠程過程調用 (RPC)。微信
SignalR應用程序能夠橫向擴展到數千個客戶端使用服務總線、 SQL Server 或Redis。websocket
最重要的是SignalR 是開放源代碼,有興趣的朋友能夠研究SignalR
前面對SignalR已經有了一個很是全面而清晰的認識,對於SignalR 和 WebSocket關係,咱們須要看下什麼是WebSocket?
WebSocket是HTML5提供的一種在單個 TCP 鏈接上進行全雙工通信的協議,目前chrome、Firefox、Opera、Safari等主流版本均支持,Internet Explorer從10開始支持。另外由於WebSocket 提供瀏覽器一個原生的 socket實現,因此直接解決了 Comet 架構很容易出錯的問題,而在整個架構的複雜度上也比傳統的實現簡單得多。
WebSocket本質上是一個基於TCP的持久化協議,相對於HTTP這種非持久的協議來講,它可以更好的節省服務器資源和帶寬,而且真正實現實時通訊。其優勢在前面咱們已經作了對比,最大的缺點就是對舊版本瀏覽器不支持。至此SignalR的出現,完美的解決了種瀏覽器的問題,SignalR不只能夠實現WebSocket的全部功能,還對舊版本瀏覽器作了支持。SignalR可自動或手動選擇使用WebSocket傳輸仍是其餘替代方式傳輸,以實現實時Web技術。
SignalR簡化了構建實時應用的過程,它包括了一個Asp .Net服務器端庫和一個Js端庫,集成了數種常見的消息傳輸方式,如long polling,WebSocket,並提供相應的Api供開發人員選擇如何調用,幫助其能夠簡單快速地實現客戶端與服務器端相互間的實時通訊。
當環境條件合適時,SignalR將WebSocket做爲底層傳輸方式的優先實現,固然,它也能很高效地回退到其餘技術。同時,SignalR提供了很是良好的Api以供遠程調用(RPC) 瀏覽器中的js代碼。
當WebSockets可用時(即瀏覽器支持Html5)SignalR使用WebSockets,當瀏覽器不支持時WebSockets時,SignalR將使用其它技術來保證達到相同效果。 瀏覽器和客戶端之間想要進行WebSocket通訊的話,從一開始的握手階段,就要從HTTP協議升級爲WebSocket協議,這是服務器根據WebSocket發送的請求包決定的。
一路走來數個年頭,感謝RDIFramework.NET框架的支持者與使用者,你們能夠經過下面的地址瞭解詳情。
RDIFramework.NET官方網站:www.rdiframework.net/
RDIFramework.NET官方博客:blog.rdiframework.net/
同時須要說明的,之後的全部技術文章以官方網站爲準,歡迎你們收藏!
RDIFramework.NET框架由海南國思軟件科技有限公司專業團隊長期打造、一直在更新、一直在升級,請放心使用!
歡迎關注RDIFramework.net框架官方公衆微信(微信號:guosisoft),及時瞭解最新動態。
掃描二維碼當即關注