2010-12-16 263 views
1

我正在編寫一個小型的基於Web的即時消息客戶端,它運行良好,但是我遇到了一些問題。原型JavaScript Ajax FIFO隊列

該系統使用PHP和JavaScript編寫,它使用每個頁面上放置的身份驗證ID,當發出ajax請求時,它必須包含此身份驗證ID。這不是一個完美的系統,但我無法改變它。

的IM系統使用週期性執行人(Prototype庫),有2個週期調用它使:

  1. 更新聯繫人列表,因爲這並不經常更改它就會每隔30秒更新一次
  2. 檢查新消息,現在這種情況會持續5秒。

的問題是:

定期執行進行呼叫更新聯繫人列表,使用認證ID,在PHP側拿起該請求,檢查認證ID,執行任務,返回新的列表JSON格式以及用於後續請求的新身份驗證ID。

如果在第一個函數返回之前檢查新消息(定時)或發送消息(未定時),則認證ID尚未更新。因此它使用與先前請求相同的認證ID。該身份驗證ID被系統的PHP端拒絕。

我正在尋找一種將請求序列化爲FIFO樣式隊列的方法,這意味着可以將所有發出的ajax請求(檢查消息,檢查聯繫人,發送消息)推送到隊列中,並儘快執行先前的ajax調用已完成(100%完成並返回)

回答

1

創建請求隊列類並使用它來處理您的ajax請求可能是個好主意。我敢肯定,你可以通過google搜索找到已經取得的東西,但這裏有一個我發現,應該爲你工作:

http://positionabsolute.net/blog/2007/04/ajax-request-queue.php

你將不得不更換所有的Ajax調用使用該新功能,但修改類像這樣應該可以解決你的問題。