一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.net的服務器推技術 (Server Push)

Asp.net的服務器推技術 (Server Push)

2019-07-04 14:31服務器之家 ASP.NET教程

在以往的和服務器端通信技術中,我們多數使用的是AJAX輪詢式訪問,也就是在Javascript中控制時間間隔,然后每隔一段時間就訪問一次服務器,然后獲得數據或通知。但是這種輪詢方式的訪問有90%是在做無用功。

要想長時間保持服務器和瀏覽器之間的連接怎么辦?長連接技術,這可不是什么新技術,用IFrame作為隱藏幀指向長請求頁面的方法早已被很多人運用在互聯網上,但是IFrame作為隱藏幀有一個弊端,那就是瀏覽器的進度條始終處在讀取狀態。為了使用戶獲得更好體驗,“Google的天才們”使用了一個叫“htmlfile”的對象解決了這一問題,并把它運用了了GMail和GTalk兩個產品上。 
如今我們公司要做的新項目上要求有實時報警功能,本來我想用AJAX輪詢做,但是覺得挺沒追求的,前段時間聽說有了Server Push,但是沒仔細研究,這次倒是個機會,一天時間,從網上搜集資料。資料不是很多,而且現在有很多開發人員還認為長連接是天方夜譚,居然還有把HTTP協議搬出來要證明自己觀點的…… 
廢話不多說了,來介紹一下長連接技術,通常的長鏈接就是做一個網頁,里面寫好一個IFrame標簽,高寬設置為0,SRC屬性指向一個網頁,比如是ASPX,然后在這個文件中不做別的,只是在調用Context.Response.Write方法,輸出什么?比如客戶端有一個更改時間的方法Change(time),那輸出就是("<script>window.parent.Change("+DateTime.Now.ToString()+")</script>"),也就是不斷的輸出客戶端的函數調用,并且做成死循環,這樣瀏覽器和服務器端就形成了一條源源不斷的數據傳輸鏈接。 
那htmlfile是什么呢?這是一個類似Javascript中Window對象的一個ActiveXObject,它內部也是DOM結構,將作為隱藏幀的IFrame寫入這個對象中,就可以解決進度條的問題。說的可能比較晦澀,來看實例代碼吧: 
Default.aspx.cs 
c# 代碼 

復制代碼代碼如下:


public partial class _Default : System.Web.UI.Page 

protected void Page_Load(object sender, EventArgs e) 


protected override void Render(HtmlTextWriter output) 

string str; 
while (true) 
{//死循環保持長鏈接 
str = "<script >window.parent.Change('" + DateTime.Now.ToLongTimeString() + "')</script>"; 
this.Context.Response.Write(str); 
this.Context.Response.Flush();//輸腳本調用出 
System.Threading.Thread.Sleep(1000); 



WebForm1.aspx 

復制代碼代碼如下:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title>Asp.net Server Push</title> 
<script type="text/javascript"> 
function Change(str){ 
window.document.getElementById("div1").innerText=str; 

function onload(){ 
var ifrpush = new ActiveXObject("htmlfile"); // 創建對象 
ifrpush.open(); //打開 
var ifrDiv = ifrpush.createElement("div"); //添加一個DIV 
ifrpush.appendChild(ifrDiv); //添加到 htmlfile 
ifrpush.parentWindow.Change=Change; //注冊 javascript 方法 搞不明白為什么還要注冊 
ifrDiv.innerHTML = "<iframe src='Default.aspx'></iframe>"; //在div里添加 iframe 
ifrpush.close(); //關閉 

onload(); 
</script> 
</head> 
<body> 
<div style=" float:left">現在時間是:</div> 
<div id="div1"></div> 
</body> 
</html> 


Default.aspx不需要做修改。 
serverpush.rar

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费大秀视频在线播放 | 双性肉文h | 亚洲国产精品无码中文在线 | 国产乱子伦在线观看不卡 | 四虎免费看 | 国产90后美女露脸在线观看 | 91在线高清视频 | 77久久| 美国videos | 亚洲冬月枫中文字幕在线看 | 国产精品天天影视久久综合网 | 欧美xxx000喷水 | 麻豆视频免费在线播放 | 好吊妞乱淫 | 男人摸女人下面 | 免费日本在线 | 女同志 videos | 日本一区二区高清免费不卡 | 3d动漫美女被吸乳羞羞视频 | 国产福利不卡一区二区三区 | 欧美日韩久久中文字幕 | 国产91亚洲精品 | 免费老外的毛片清高 | 日韩免费视频一区 | 色老妇| 国产色视频网站 | 国产成人精品高清免费 | 538精品视频 | 日本成熟老妇xxxx | 国产精品久久久久久久福利院 | 亚洲一二三区久久五月天婷婷 | 日本肉体xxxx| 饭冈加奈子黑人解禁在线播放 | 天天综合网天天做天天受 | 美女草b| 爱情岛论坛亚洲永久入口口 | 亚洲网视频 | 亚洲经典| 久久青草费线频观看国产 | 无限在线观看免费入口 | 日本视频免费在线观看 |