關於.NET中的Server push技術

iDotNetSpace發表於2010-03-18

今天突發奇想,想研究一下服務端內容有變化,如何引起客戶端的改變。

一般來說方法有2種,一種就是客戶端用JS非同步定時輪詢伺服器端,這種是大部分人採用的方法,但是我在想到底可以不可以實現伺服器端有改變時才會主動推送到客戶端呢?按理來說這種方式對於B/S是不可能實現的,因為B/S是無連線的,這種request/response的方式無法保持狀態。搜了一下,看到部落格園有位朋友寫了篇文章是關於Server Push的,文章點這裡看,我自己把它的程式碼複製過來看了下效果,完整程式碼如下:

前臺:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 @ Page Language="C#" AutoEventWireup="true" CodeBehind="ServerPushDemo.aspx.cs" Inherits="WebDemo.ServerPush.ServerPushDemo" %>
 2 
 3 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml" >
 6 <head runat="server">
 7     <title>無標題頁title>
 8     <script type="text/javascript">
 9         function SetValue(time)
10         {
11             document.getElementById("TbTime").value=time;
12         }
13     script>
14 head>
15 <body>
16     <form id="form1" runat="server">
17     <div>
18         <input type="text" id="TbTime"/>
19     div>
20     form>
21 body>
22 html>
23 

後臺程式碼:

關於.NET中的Server push技術Code

這種方式的實現原理其實就是在OnRender事件裡,用迴圈掛起連線,因為伺服器端沒有response完畢,所以一直和客戶端保持連線,雖然這種方式能實現伺服器端向客戶端的推送,但它的代價太大,因為web的優勢就是無連線。這樣每個客戶端都要佔用伺服器端的一個IIS連線,如果使用者超過百個,就會非常恐怖的。所以這種方式我覺得不可取,相比來說,還是用AJAX的方式定時輪詢更好。

真正意義上的Server Push好像我找了一些文章在Cgi裡可以實現,點這裡看。但在.net裡的實現我就不得而知了,知道的高人請指點下,呵呵。

我還搜到一個關於.net推技術的就是Comet框架,可以實現長連線的,具體文章請點這裡。改天我會把相關Demo發出來

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-629781/,如需轉載,請註明出處,否則將追究法律責任。

相關文章