SignalR系列教程 伺服器廣播與主動資料推送

2022-01-16 09:26:42 字數 3929 閱讀 3281

本篇博文參考:

本教程演示如何建立乙個 web 應用程式使用 asp.net signalr 2 提供的伺服器廣播功能。

伺服器廣播意味著傳送到客戶端的通訊由伺服器啟動。我們之前聊天室的專案是乙個使用者提交資料後,伺服器接收到訊息,然後把訊息廣播給當前所有的使用者。如下圖

本教程所講的恰恰相反,我們是由伺服器自動把訊息推送給當前所有使用者。如**資訊顯示:

在本教程中,我們將會建立一**票**自動收錄的實時應用程式,在其中您想要定期"推"送資料,通知從伺服器到所有連線的客戶端。

在本教程的第一部分,你將從頭開始建立該應用程式的簡化的版本。

在本教程的其餘部分中,您會安裝 nuget 包,其中包含額外的功能,並審查這些功能的**。

我們依然新建乙個空專案,並使用「程式包管理控制台」執行「install-package microsoft.aspnet.signalr」安裝最新版本的signalr。

安裝完成後會自動開啟「readme.txt」檔案,文中告訴我們要新建乙個startup並註冊signalr。原文如下

using microsoft.owin;

using owin;

}} 我們按照它的來,新建乙個startup然後在configuration中註冊signalr路由。

我們建立stock用來存放**詳細資訊

public class stock

public decimal price

set_price = value;

if (dayopen == 0)}}

public decimal dayopen

public decimal change

}public double percentchange}}

我們將在stocktickerhub類中定義和js互動的**。我們需要維護**資料的更新和刪除,但是我們不能在stocktickerhub類中進行操作,因為stocktickerhub類是不儲存資料的,如果我們把**的curd**放在stocktickerhub中可能會造成我們的資料丟失。我們利用vs新增新項選擇集線器v2,並替換成以下**

[hubname("stocktickermini")]

public class stocktickerhub : hub

public stocktickerhub(stockticker stockticker)

public ienumerablegetallstocks()

}

stocktickerhub類中,我們公開了乙個getallstocks的方法,當客戶端連線成功後我們將呼叫「getallstocks」方法用來顯示**資訊。hubname標籤是乙個別名,按照傳統我們連線需要用stocktickerhub,但是我們加了hubname後,前段就可以通過stocktickermini來建立連線。

我們新建乙個stockticker類,把替換成以下**

public class stockticker

,new stock

};stocks.foreach(stock => _stocks.tryadd(stock.symbol, stock));

_timer = new timer(updatestockprices, null, _updateinterval, _updateinterval);

}public static stockticker instance

}private ihubconnectioncontextclients

public ienumerablegetallstocks()

private void updatestockprices(object state)

}_updatingstockprices = false;}}

}private bool tryupdatestockprice(stock stock)

var random = new random((int)math.floor(stock.price));

var percentchange = random.nextdouble() * _rangepercent;

var pos = random.nextdouble() > .51;

var change = math.round(stock.price * (decimal)percentchange, 2);

change = pos ? change : -change;

stock.price += change;

return true;

}private void broadcaststockprice(stock stock)

}

由於多個執行緒通過要訪問stockticker,所以stockticker必須是執行緒安全的。

好了,現在完成了基本的配置,我們建立乙個名為index.html的檔案並把它設定為啟動項。index.html的**如下

symbol

price

open

change

%

loading...

在專案新建乙個名為stockticker.js的檔案,並用以下**替換

if (!string.prototype.supplant) ]*)}/g,

function (a, b)

);};

}$(function () ';

function formatstock(stock) );

}function init() );

});}

ticker.client.updatestockprice = function (stock)

$.connection.hub.start().done(init);

});

$.connection是指signalr的**,stocktickerministocktickerhubhubname所設定的別名。

在所有的變數和函式定義後,會在最後一行啟動signalr連線,並進行初始化。執行起來即可看到效果

請大家注意一下stockticker類中的broadcaststockprice方法,這個方法最終會獲取當前所有的連線使用者,並觸發updatestockprice方法。在前兩章的時候我們都是由客戶端主動呼叫hub類的某乙個方法,然後在由方法內部進行觸發前台js**。在本章中,我們定義了乙個定時器用來定時更新資料,每當資料發生修改時就會主動觸發updatestockprice,這也是本章與前兩章不同的地方。

數廣伺服器IIS部署

總體介紹 數廣雲伺服器在廣東省 部門推廣的廣泛問題,導致以前部署在客戶自己伺服器上的系統需要遷移到數廣云云伺服器,下面介紹一下雲伺服器部署步驟與避免的坑。一 secoclient堡壘機 1 在外需要到雲伺服器部署系統 後台或其他環境的話,需要通過使用secoclient堡壘機軟體,然後在使用給定的連...

Linux伺服器安全教程

一 系統安全記錄檔案 作業系統內部的記錄檔案是檢測是否有網路入侵的重要線索。如果您的系統是直接連到internet,您發現有很多人對您的系統做telnet ftp登入嘗試,可以執行 more var log secure grep refused 來檢查系統所受到的攻擊,以便採取相應的對策,如使用s...

tftp伺服器安裝教程

下面講訴如何在宿主機上安裝tftp伺服器和配置tftp 首先得在宿主機的linux上安裝tftp伺服器,執行命令 mount dev cdrom mnt 將光碟機掛載到mnt目錄下 rpm ivh mnt packages tftp server 0.49 7.el6.i686.rpm 提示出現er...