<p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 利用SignalR實(shí)現(xiàn)實(shí)時(shí)推送信息

    共 1796字,需瀏覽 4分鐘

     ·

    2020-08-07 00:33

    前言


    下面將給大家分享有關(guān)于SignalR的技術(shù)的一種應(yīng)用。


    一、什么是SignalR?


    SignalR是一個(gè)ASP .NET下的類(lèi)庫(kù),可以在ASP .NET的Web項(xiàng)目中實(shí)現(xiàn)實(shí)時(shí)通信。


    什么是實(shí)時(shí)通訊?


    就是當(dāng)所連接的客戶(hù)端變得可用時(shí)服務(wù)器代碼可以立即向其推送內(nèi)容,而不是讓服務(wù)器等待客戶(hù)端請(qǐng)求新的數(shù)據(jù)。


    當(dāng)WebSockets可用時(shí)(即瀏覽器支持Html5,SignalR使用WebSockets,當(dāng)不支持時(shí)SignalR將使用其它技術(shù)來(lái)保證達(dá)到相同效果。


    二、主要用途


    它出現(xiàn)的主要目的是實(shí)現(xiàn)服務(wù)器主動(dòng)推送(Push)消息到客戶(hù)端頁(yè)面,這樣客戶(hù)端就不必重新發(fā)送請(qǐng)求或使用輪詢(xún)技術(shù)來(lái)獲取消息。


    可以用在聊天室、看板、單點(diǎn)通訊、多點(diǎn)通訊,甚至可以結(jié)合其他技術(shù)用來(lái)做視頻聊天。當(dāng)然也有其他用途。


    三、實(shí)現(xiàn)機(jī)制


    SignalR 的實(shí)現(xiàn)機(jī)制與 .NET WCF是相似的,都是使用遠(yuǎn)程代理來(lái)實(shí)現(xiàn)。


    在具體使用上,有兩種不同目的的接口:PersistentConnection 和 Hubs,其中 PersistentConnection 是實(shí)現(xiàn)了長(zhǎng)時(shí)間的 JavaScript 輪詢(xún)(類(lèi)似于 Comet),Hub 是用來(lái)解決實(shí)時(shí)信息交換問(wèn)題,它是利用 Javascript 動(dòng)態(tài)載入執(zhí)行方法實(shí)現(xiàn)的。SignalR 將整個(gè)連接,信息交換過(guò)程封裝得非常漂亮,客戶(hù)端與服務(wù)器端全部使用 JSON 來(lái)交換數(shù)據(jù)。


    四、基本流程圖


    五、示例


    以下教程我會(huì)就 Hubs 接口的使用來(lái)做一個(gè)實(shí)時(shí)看板:


    示例環(huán)境:


    • .NET Framework 4.5及以上(必須要)?


    • Win10、Visual Stadio 2017 、SQL2014


    1、新建項(xiàng)目,打開(kāi)NuGet包管理器,安裝SignalR.最新版本,我這里的版本是V2.2.1.

    如圖:



    2、 在App_Start目錄中,創(chuàng)建一個(gè)類(lèi),類(lèi)名為Startup:



    3、 在Startup.cs中注冊(cè)管道:



    4、設(shè)置webconfig。建立一個(gè)類(lèi)DB:目的是獲取webconfig文件中的數(shù)據(jù)庫(kù)連接字符串:




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



    此處的sqlDependency作用:

    當(dāng)被監(jiān)測(cè)的數(shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生變化時(shí),SqlDependency會(huì)自動(dòng)觸發(fā)OnChange事件來(lái)通知應(yīng)用程序,從而達(dá)到讓系統(tǒng)自動(dòng)更新數(shù)據(jù)(或緩存)的目的。詳情看第8步。


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



    再到數(shù)據(jù)庫(kù)中建立相對(duì)于的數(shù)據(jù)庫(kù)和表。


    注意:建完表后記得啟動(dòng)SQL Server Service Broker。


    啟動(dòng)SQL Server Service Broker 其中([SignalR]為數(shù)據(jù)庫(kù)名)

    ALTER DATABASE [SignalR] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

    ALTER DATABASE [SignalR] SET ENABLE_BROKER;


    7、在項(xiàng)目錄中,創(chuàng)建一個(gè)SignalR目錄,我們就可以在這個(gè)目錄中添加Hub類(lèi)了:



    記得使用小駝峰命名,不然客戶(hù)端調(diào)用不了。


    8、實(shí)現(xiàn)去數(shù)據(jù)庫(kù)獲取數(shù)據(jù),當(dāng)數(shù)據(jù)庫(kù)的數(shù)據(jù)變化時(shí),客戶(hù)端也能實(shí)時(shí)顯示:




    其中以下代碼是根據(jù)數(shù)據(jù)庫(kù)檢測(cè)到的變化的內(nèi)容觸發(fā)OnChange事件。


    SqlDependency dependency = new SqlDependency(sqlCommand);
    dependency.OnChange += new OnChangeEventHandler(dependency_Onchange);


    9、建一個(gè)控制器:兩個(gè)Action操作



    10、視圖





    到了,到此為止本教程基本結(jié)束了,下面將會(huì)是本教程的實(shí)際效果。


    這是數(shù)據(jù)庫(kù)中這張表的數(shù)據(jù)



    現(xiàn)在把第二行第二列的5修改為9。



    由此可見(jiàn)所有連接的客戶(hù)端的值也跟著改變了,這樣實(shí)時(shí)推送的功能也就實(shí)現(xiàn)了。


    關(guān)于SignalR的相關(guān)內(nèi)容就介紹那么多了,更多SignalR的技術(shù)內(nèi)容大家也可以自行挖掘一下。


    瀏覽 45
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    <p id="m2nkj"><option id="m2nkj"><big id="m2nkj"></big></option></p>
    <strong id="m2nkj"></strong>
    <ruby id="m2nkj"></ruby>

    <var id="m2nkj"></var>
  • 亚洲成人精品视频 | 丁香五月婷婷色综合 | 人妻无码在线观看 | 深夜福利视频久久久久 | 美女逼流水网站 | 中文的黄色毛片 | 青草久久久 | 一级a看片在线观看 | 国产成人视频在线播放 | 日日干夜夜操 |