新聞中心
推送技術Server Push的基礎思想是將瀏覽器主動查詢信息改為服務器主動發(fā)送信息。服務器發(fā)送一批數(shù)據(jù),瀏覽器顯示這些數(shù)據(jù),同時保證與服務器的連接。當服務器需要再次發(fā)送一批數(shù)據(jù)時,瀏覽器顯示數(shù)據(jù)并保持連接。以后,服務器仍然可以發(fā)送批量數(shù)據(jù),瀏覽器繼續(xù)顯示數(shù)據(jù),依次類推。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,梁子湖企業(yè)網(wǎng)站建設,梁子湖品牌網(wǎng)站建設,網(wǎng)站定制,梁子湖網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,梁子湖網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
最近在做一個即時顯示的面板頁面。
需求:
1.即時顯示;
2.無刷新。
做Web的話,一聽到無刷新,馬上想到的就會是Ajax,我第一版的實現(xiàn)方法是Ajax的Updatepanel+Timer控件,定時向服務器發(fā)出Request。實現(xiàn)是沒有問題,但是對于資源的消耗非??植溃梢赃@么說。打開進程管理器,可以看到數(shù)據(jù)庫和瀏覽器(因為是在本機上做)的CPU占用比較高,并且瀏覽器的內(nèi)存占用一直在上升。囧——不用再多解釋了,你懂的。
資料到處找,各種找,從Fighting Team.SDF那里,了解到了Server Push——服務器推送技術??戳艘粌蓚€不怎么完整的Demo(網(wǎng)上這方面的資料,真不多,要不就是各種哥各種轉載的)后,開始實施。來,直接貼代碼:
這里要引入Threading的類庫:
- using System.Threading;
- ///后臺程序段:
- ///
- /// 以發(fā)送服務端控制信息的方式提供HtmlTextWriter對象
- ///
- ///
- protected override void Render(HtmlTextWriter writer)
- {
- base.Render(writer);
- while (Response.IsClientConnected)
- {
- Response.Write(" ");
- Response.Flush();
- Thread.Sleep(41);
- }
- }
可以看到,其實代碼非常簡單,就是重寫了Rander方法。方法里,做一個死循環(huán),將后臺數(shù)據(jù)庫里的數(shù)據(jù),不停地Response到前臺,展示給用戶。就實現(xiàn)了這么一個推送的動作。
小總結一下:這個方法因為只有一個推送,比之前用Timer定時發(fā)送Request,再接受Response的方法優(yōu)化許多,不僅減少了服務器的開銷,也降低了數(shù)據(jù)庫的負荷。再打開進程管理器看一下,CPU和內(nèi)存的占用都比較低。不過可以相對性既然存在,那么說明這個方法也有不利的一方面:ClientConnected意思是,客戶端連入,就是說客戶端沒有斷開與服務端的連接。我們知道服務器的連入數(shù)是有限制的,如果一直保持連接狀態(tài)不斷開連接的話,那么連入數(shù)一多,這個資源的消耗又是很可怕的。所以權衡完Server Push技術,比較適合用在連入數(shù)少的場合,比如像信息顯示面板之類的,連入數(shù)都不較少,比較單一,則不會占用太多的資源。
分享標題:淺入淺出ServerPush
轉載來源:http://fisionsoft.com.cn/article/dhpecgd.html


咨詢
建站咨詢
