国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:42:40
字體:
來源:轉載
供稿:網友
要想長時間保持服務器和瀏覽器之間的連接怎么辦?長連接技術,這可不是什么新技術,用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 方法 搞不明白為什么還要注冊
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三原县| 普安县| 扎赉特旗| 万年县| 固镇县| 高尔夫| 青铜峡市| 宿州市| 资阳市| 清丰县| 湖北省| 通江县| 十堰市| 松原市| 哈巴河县| 锡林郭勒盟| 大宁县| 贡觉县| 广宁县| 丰镇市| 张掖市| 清丰县| 温宿县| 金寨县| 景宁| 洪江市| 思茅市| 渭源县| 大名县| 阿巴嘎旗| 泗阳县| 额尔古纳市| 鹤庆县| 金堂县| 泰宁县| 黄骅市| 株洲市| 新平| 望奎县| 博爱县| 得荣县|