在以往的和服務器端通信技術中,我們多數使用的是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#代碼WebForm1.aspx
Html代碼新聞熱點
疑難解答