2015年3月12日 星期四

asp實作線上人數



Application 物件的應用

Application 物件可以用來保存總體變數,這些變數將保留到伺服器關機為止,由於這些變數在保存時不會去區分個別用戶端的連線編號(Session ID),因此無論是哪個用戶端都可以讀寫,利用這個特性我們可以很容易開發出計數器與聊天室的功能。

下面的例子,當參觀者連線到首頁時,就累計人數:

<%
Application.Lock
 Application("count")=Application("count")+1
 Application.Unlock
 %>
累計參觀人次:<% =Application("count") %>

在操作 Application 物件時要特別注意寫入衝突的問題,當參觀者同時上線時,由於大家所存取的 Application 變數是同一個,如果不把它鎖定就直接寫入,會造成計數不正確的現象。Application.Lock 就是用來鎖定物件,防止他人寫入。當物件被鎖定時,其他人就會暫停執行程式,等到鎖定解除後才會繼續執行。

如果要製作的計數器是線上人數,則不可以只累加而不減少,正確的作法應該是在參觀者上線時加 1,離線時減 1,特別要注意的是參觀者上線時,並不一定都會去連首頁,所以進行計數的程式不能寫在首頁中,首頁頂多只是用來秀出人數而已。

要達到這個功能必須使用 Session 物件所提供的兩個事件處理器:onStart 和 onEnd,前者在參觀者連線時會自動觸發執行,後者在離線時觸發執行。而要定義這兩個事件處理器,只能將程式寫在 global.asa 檔案中,這個檔案必須建立在網站主目錄的根目錄中,而且一個虛擬站台只能有一份 global.asa。程式語法如下:

<script language="VBScript" runat="SERVER">
 SUB Session_onStart
     Application.Lock
     Application("online")=Application("online")+1
     Application.Unlock
 END SUB

 SUB Session_onEnd
     Application.Lock
     Application("online")=Application("online")-1
     Application.Unlock
 END SUB
 </script>

global.asa 程式存檔後就會立即生效,現在我們就可以找個適當的網頁,來顯示線上人數:

現在有<% =Application("online") %>人上線

補充說明:Application 物件也有提供 onStart 和 onEnd 事件處理器,前者在 IIS 啟動時自動執行,後者在 IIS 關閉時執行。




來源:
http://www.spps.tp.edu.tw/documents/memo/asp_develop.htm

沒有留言:

張貼留言