天天看點

使用ExtJs開發MIS系統(4):輪詢

衆所周知,Http是無狀态的,每次請求結束後,用戶端都會和伺服器端斷開連接配接。請求總是從用戶端發起的,除非用戶端發起請求,否則伺服器端沒有辦法主動地向用戶端傳遞任何資料。然而對于MIS,常常需要從伺服器端推送資料給用戶端,例如當使用者送出了一個新的申請後,需要管理者去審批。解決辦法就是用戶端“锲而不舍”的詢問伺服器,是否有新的事情要做,也就是所謂輪詢技術。

輪詢的過程可以用下面這個圖來描述:

使用ExtJs開發MIS系統(4):輪詢

我們仍然以使用者登入為例,先來看輪詢的過程:

每一次使用者成功登陸後,伺服器端都會向用戶端頒發一個身份令牌,這個令牌是一個GUID。

用戶端每一分鐘向伺服器端發起一次請求,報告目前使用者登陸令牌。

伺服器取得該令牌後,驗證使用者登入資訊,如果使用者登入資訊有效,則更新使用者最後活動時間,然後傳回使用者目前登入有效的資訊,否則傳回錯誤。

用戶端解析登陸資訊。

如果令牌失效,例如使用者被管理者鎖定或删除等,則報告登陸失效,跳轉登陸界面。否則什麼都不做。

這樣就能實作:

任何使用者資訊的改變都會及時展現,例如該使用者接收到新的系統短消息,則下次用戶端輪詢時會有報告。

管理者人員可以管理使用者登陸狀态,較準确的檢視目前登入使用者或者踢出使用者等。

實際上,輪詢根本目的是使伺服器端可以更準确的了解用戶端狀态,也有機會告訴用戶端要做些什麼,這模拟了一個雙向請求的連結。

使用ExtJs實作輪詢是非常用容易的,内置的Ext.TaskMgr封裝了setInterval,clearInterval等方法,例如上面的輪詢可以用下面的代碼來實作:

詳細說明可以參考ExtJs文檔中Ext.TaskMgr和Ext.util.TaskRunner這兩個類。

本文轉自冬冬部落格園部落格,原文連結:http://www.cnblogs.com/yuandong/archive/2008/12/21/1359360.html,如需轉載請自行聯系原作者

繼續閱讀