天天看點

一起談.NET技術,Server-push技術(comet)----------asp.net中的異步處理+client與伺服器端的長連接配接

  server-push技術已經面世很久了,但直到GTALK的誕生才慢慢的引導出這項技術,不過到現在為止,也很少有人去應用這方面的技術,server-push倒底是一個什麼樣的東西呢?

  故名思義,server-push即“伺服器推”的意思,ajax大家都用過,它和server-push是完全相反的兩個東西,ajax是從伺服器端拉取資料,如果要定期更新頁面上顯示的資料塊,那麼最簡單的方法就是寫個計時器,server-push則不同,它的本質是将client與server建立一個長連接配接,即連上後不斷開,一旦伺服器端有新的資料就将其推送到用戶端,講到這裡出現了幾個問題。

  1.ajax與server-push的差別與相同點分别是什麼?

  答:ajax與server-push的共同點是,它們同樣使用javascript實作資料無重新整理展示,差別在于,如果你使用ajax時時更新資料,那麼無論伺服器端資料有無變化,都會定期向伺服器端取資料,這樣便造成了一些不必要性能消耗,對伺服器造成了一定的壓力,而server-push則不同,它是在伺服器端有新資料産生的時候才對用戶端進行資料回報,不過其缺點也産生于此,因為它會占用WEB伺服器的連接配接數,使用者通路量大且對連接配接數有一定限制的WEB伺服器是不适用于server-push的。

  2.伺服器端如何發現有新資料?

  答:這個問題需要根據具體應用環境來看,如果用于“即時通訊”工具的線上使用者統計,伺服器端發現有新使用者登入,即向所有用戶端推送資料,還有一種用得比較多的方式是在伺服器端使用多線程來監控資料的更改。

  3.伺服器端如何往用戶端推資料?

  答:此問題是最關鍵的,伺服器端怎麼推送資料到用戶端呢?.net中有個異步回調,使用它便可以實作伺服器端往用戶端資料的推送,.net中異步回調是怎麼回事呢?其實很簡單.

  e.g. 寫個類,假如專門用來實作異步回調,必須注意以下幾點

  1>繼承IHttpAsyncHandler接口   //定義 HTTP 異步處理程式對象必須實作的協定。

  2>以下幾個方法不能少

     上面方法中的this指的是另外一個類,此類繼承接口IAsyncResult(//表示異步操作的狀态)

  終上所述,server-push需要用戶端與伺服器端建立一個長連接配接,這個長連接配接不能斷,這樣伺服器端一旦有東西就會通過這個管道傳到用戶端,資料的push又需要使用到.net的異步回調。此處沒有涉及到具體的代碼編寫,對于沒有接觸過.net異步回調的朋友來說看起來可能有點吃力,不過首先明白原理,然後再慢慢的去摸索技術。

繼續閱讀