利用SignalR實現實時推送信息


一、什么是SignalR?
SignalR 是一個ASP .NET 下的類庫,可以在ASP .NET 的Web項目中實現實時通信。
什么是實時通訊?
就是當所連接的客戶端變得可用時服務器代碼可以立即向其推送內容,而不是讓服務器等待客戶端請求新的數據。當WebSockets可用時(即瀏覽器支持Html5,SignalR使用WebSockets,當不支持時SignalR將使用其它技術來保證達到相同效果。

二、主要用途:
它出現的主要目的是實現服務器主動推送(Push)消息到客戶端頁面,這樣客戶端就不必重新發送請求或使用輪詢技術來獲取消息。
可以用在聊天室、看板、單點通訊、多點通訊,甚至可以結合其他技術用來做視頻聊天。當然也有其他用途。

三、實現機制:
SignalR 的實現機制與 .NET WCF是相似的,都是使用遠程代理來實現。在具體使用上,有兩種不同目的的接口:PersistentConnection 和 Hubs,其中 PersistentConnection 是實現了長時間的 JavaScript 輪詢(類似於 Comet),Hub 是用來解決實時信息交換問題,它是利用 Javascript 動態載入執行方法實現的。SignalR 將整個連接,信息交換過程封裝得非常漂亮,客戶端與服務器端全部使用 JSON 來交換數據。

四、基本流程圖:

 
Paste_Image.png

五、示例:
以下教程我會就 Hubs 接口的使用來做一個實時看板:
示例環境:.NET Framework4.5及以上(必須要) WIN10,Visual Stadio 2017 ,SQL2014.

1、新建項目,打開NuGet包管理器,安裝SignalR.最新版本,我這里的版本是V2.2.1.
如圖:


 
Paste_Image.png

2、 在App_Start目錄中,創建一個類,類名為Startup:


 
Paste_Image.png

3、 在Startup.cs中注冊管道:


 
Paste_Image.png

4、設置webconfig。建立一個類DB:目的是獲取webconfig文件中的數據庫連接字符串:


 
Paste_Image.png
 
Paste_Image.png

5、 我們需要在Global.asax.cs的Application_Start和Application_End方法中添加以下內容:


 
Paste_Image.png

此處的sqlDependency作用:
當被監測的數據庫中的數據發生變化時,SqlDependency會自動觸發OnChange事件來通知應用程序,從而達到讓系統自動更新數據(或緩存)的目的。詳情看第8步。

6、建個Model,TableA。這里就只有X,Y,Z三個字段:


 
Paste_Image.png

再到數據庫中建立相對於的數據庫和表。
注意:建完表后記得啟動SQL Server Service Broker。
啟動SQL Server Service Broker 其中([SignalR]為數據庫名)
ALTER DATABASE [SignalR] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [SignalR] SET ENABLE_BROKER;

7、在項目錄中,創建一個SignalR目錄,我們就可以在這個目錄中添加Hub類了:


 
Paste_Image.png

記得使用小駝峰命名,不然客戶端調用不了。

8、實現去數據庫獲取數據,當數據庫的數據變化時,客戶端也能實時顯示:


 
Paste_Image.png
 
Paste_Image.png

其中以下代碼是根據數據庫檢測到的變化的內容觸發OnChange事件。
SqlDependency dependency = new SqlDependency(sqlCommand);
dependency.OnChange += new OnChangeEventHandler(dependency_Onchange);

9、建一個控制器:兩個Action操作


 
Paste_Image.png

10、視圖:


 
Paste_Image.png
 
Paste_Image.png
 
Paste_Image.png

到了,到此為止本教程基本結束了,下面將會是本教程的實際效果。

這是數據庫中這張表的數據


 
Paste_Image.png

現在把第二行第二列的5修改為9。


 
Paste_Image.png

由此可見所有連接的客戶端的值也跟着改變了,這樣實時推送的功能也就實現了。
好了,關於SignalR的相關內容就介紹那么多了,更多SignalR的技術內容大家也可以自行挖掘一下。

轉自
何向宇
鏈接:https://www.jianshu.com/p/f8a71c0d3eb0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM