2010-10-15 99 views

回答

4

您可以爲頁面的每個「新」加載分配一個UUID,並從所有UUID中刪除不是最近用戶的請求。您需要在每個請求中發回UUID。如果你想獲得先進的功能,你可以讓頁面上的JavaScript檢查響應,看看服務器是否說它是一箇舊的UUID,並且它應該停止發出請求。

+2

打敗我發佈相同的基本想法。對你很好。 – jcolebrand 2010-10-15 17:36:55

+1

偉大的思想家都認爲。 – Incognito 2010-10-15 18:09:29

3

使用在瀏覽器中實時生成的GUID註冊每個連接。檢查GUID和用戶名對,查看哪個頁面是所有者的最後一頁。在網頁加載時,聲明自己是一個新窗口,並確保您擁有所有權。排序的PageJustLoadedMakeMeOwner(myGuid, username)

然後有那個GUID目標幀定期更新服務器,因爲它的頁面的所有權。

如果它停止更新服務器,則在服務器中有允許下一頁聯繫以獲取該用戶名的所有權的規則。

有丟失所有權自頁面的頁面只能訪問一分鐘左右一次。

檢查給定頁面是否爲該用戶名的所有者的響應速度非常快。就客戶所知,幾乎沒有時間去做。所以AJAX並沒有真正限制你。

排序一個AmIOwner(username, myGuid)檢查(可能每隔五秒左右檢查一次)。如果屬實,那麼做你想要發生的事情。如果爲false,則輪詢該頁面的所有者是否空置。如果屬實,則取得所有權。如果爲false,則在xx秒內再次輪詢以查看所有者是否空置。

這是否有任何意義?

1

您可以在同一瀏覽器中爲多個實例做些事情,但如果用戶有多個瀏覽器,則無法做任何事情。 (當然,不是那種常見的場景)

如果你仍然想嘗試一下,最簡單的方法可能是在cookie中保留最後一個請求的時間戳,並且只在某個閾值時發出新的請求。在多重實例安定下來之前,您仍然可能會進行小規模的比賽,但是如果您對投票使用模糊時間段,那麼實例應該很快穩定到一個穩定狀態,其中一個實例進行呼叫,其他實例將重新使用來自上次呼叫。

該方法的主要優點是可以通過任何實例進行請求,因此您不必擔心協商一個「主要」實例,該實例會進行調用並計算後備算法,如果用戶關閉「主要」一個。主要缺點是由於它是基於模糊計時的算法,因此它不能完全消除競爭條件,偶爾會有兩個實例發出請求。你必須微調時間,以儘量減少這種情況,但你不能完全防止它。

相關問題