top
Loading...
“推”技術在網站建設方面的應用
“推”技術在網站建設方面的應用

————“推”向更快!
Server push是一種先進的服務器和客戶機之間的通信連結方式,它利用在服務器端的CGI腳本程序把數據源源不斷地推向客戶機,從而使客戶機和服務器之間的交互性能大大提高。Server push對網站建設有廣闊的前景和深遠的意義。

認識Server push

Server push就是前一段時間炒得很熱的“推”技術。它最先由Netscape公司提出,現在卻由Microsoft發展得淋漓盡致。我們先來看一下在它出現之前,傳統的Client pull是怎么工作的。當客戶機向服務器發送一個請求后,服務器對這一請求做出響應,把相應的數據傳送給客戶機,在客戶機的瀏覽器上生成相應的頁面內容,這一切做得似乎已經很好了。但是,對于用瀏覽器做為交互窗口的用戶,不可能隨時刷新頁面以得到返回的內容。所以,Client pull用〈META HTTP-EQUIV=REFRESH CONTENT=″time;URL=url″〉這樣的HTML文檔頭來自動刷新頁面,使用戶的瀏覽器能不斷地刷新以接受服務器傳回的內容。問題的關鍵在于,time這個值是很難定義的,比如你定義為10,你就得忍受每10秒鐘才能看到一句新內容這種痛苦的等待。

現在我們再來看看 Server push是如何解決這個問題的。采用了Server push的服務器在客戶機做出一個請求后,和客戶機建立一個永久的連接,然后服務器會根據客戶機的請求不斷地把數據包推向服務器,注意,這個推的過程是不間斷的。由服務器推向客戶機的數據在客戶機的瀏覽器上會不斷地生成新的內容,而且不會產生〈META HTTP-EQUIV=REFRESH CONTENT=″time;URL=url″〉那樣的閃動效果。你不必再等待,那些你覺察不到的延遲會讓你覺得服務器的響應和你的請求已經達到了同步的程度。

Server push應用實例

下面我們用Perl來寫一個計數器,為了看到在一段時間內這個計數器是怎么變化的。應該讓這個計數器在你的頁面上不斷地即時更新,當然現實中這是沒有必要的,這里只是為了使用這個例子來說明Server push的CGI腳本的寫法:

示例:Counter.cgi

#!/usr/bin/perl

&counterfile=counter.txt;#這個文件要放在腳本的同一目錄,屬性為666。

select (STDOUT);

$| = 1;

if (lc($ENV{′HTTP—USER—AGENT′}) =~ ″Mozilla″) {$BROWER = ″Mozilla″;}

print ″Content-Type: multipart/x-mixed-replace;boundary=BOUNDARYnn″;

if ($BROWER ne ″Mozilla″)

{ print ″--BOUNDARYn″;

print ″Content-type: text/htmlnn″; }

#雖然Mozilla是Netscape公司的標志,但目前Mozilla已是絕大多數瀏覽器的標準。

open(COUNTER,″〉$counterfile″) || die $!;

$counter=〈COUNTER〉; close(COUNTER); $counter++;

#把counter.txt中的數值讀出后加1。

if (length($counter)==1) {print ″00000$counter″;}

if (length($counter)==2) {print ″0000$counter″;}

if (length($counter)==3) {print ″000$counter″;}

if (length($counter)==4) {print ″00$counter″;}

if (length($counter)==5) {print ″0$counter″;}

if (length($counter)==1) {print ″$counter″;}

#為保證計數器的美觀,在計數不足6位時前面補0。

open(COUNTER,″〉 $conterfile″) ||die$$!;

print COUNTER $counter;close(COUNTER);

#把新的計數值寫回文件。

如何實現Server push

要實現服務器端的push技術,其實非常簡單。Server push在服務器的CGI腳本聲明HTML文檔類型時,把傳統的Content-Type: text/html改成Content-Type: multipart/x-mixed-replace;boundary=BOUNDARY這樣的文檔類型,就會反饋給用戶一個Server push類型的連結。這是Server push技術和Client pull的最根本的區別。當然Server push在生成頁面時會采用很多的技巧來處理用戶端瀏覽器頁面的生成,但作為最主要的連結方式,就是HTML中的類型聲明。也就是說,在服務端處理客戶機的請求調用CGI腳本程序時,如果CGI腳本中提供了一個像Content-Type: multipart/x-mixed-replace;boundary=BOUNDARY這樣的HTML文檔頭,服務器就會把CGI腳本中指定的數據強行推給客戶機。

Server push在網站建設方面的應用

看到了吧?Server push和Client pull的主程序并沒有本質的區別,只是聲明的HTML文件類型和傳統的Content-Type: text/html類型不一樣。當然,如果做在線即時交流的程序,比如聊天室程序,還要有別的技巧來處理頁面的顯示問題。一個網站的主要技術范例就像一個虛擬社區那樣的程序,而一個虛擬社區的主要技術就集中在一個聊天室技術:在線實時交流、留言功能(BBS)、發信功能以及眾多的用戶管理功能等等,所以做好一個聊天室,你就能夠做好一個網站。目前用Server push寫的聊天室并不多,那種速度和刷新方式,和傳統的聊天室不是一個檔次的。
北斗有巢氏 有巢氏北斗