簡體   English   中英

檢查其他用戶使用的資源的可用性

[英]Check availability of resource used by another user

構建 Web 應用程序。

用戶可以通過瀏覽器訪問服務器上的共享資源主機,但是如果 UserA 已經在使用 Resource1,則在 UserA 釋放 Resource1 或在給定的時間之前,UserB 不應使用 Resource1。

對於這一部分:我選擇使用帶有元組列表(資源、當前用戶)的 MySQL 表並運行 cron 任務來刪除過期的元組。

現在,我希望能夠通知 UserA,UserB 想要訪問 Resource1,如果沒有得到 UserA 的答復,則 UserA 失去了對 Resource1 的鎖定,然后該資源可供 UserB 使用。

對於這部分,我想我必須使用 AJAX。 我想過以下解決方案:

用戶的瀏覽器定期進行 AJAX 調用(假設每分鍾)以證明他還活着,並且在調用時,如果另一個用戶請求了相同的資源,他必須在給定的時間內挑戰服務器請求(例如驗證碼) )。 如果挑戰失敗,則意味着用戶不再在這里(可能他打開瀏覽器或未聚焦網頁)。

棘手的部分是:“他必須在給定的時間內(例如驗證碼)挑戰服務器請求”。 怎么做?

我是否遵循最佳路徑?

是的,你概述的很好。 使用 ajax 也完全沒問題,特別是如果你只是每分鍾輪詢一次。

例如,假設您有以下內容:

setInterval(function() {
 $.get('/resource/status', function(response) {
    if (response.data.newRequest) {
       //This would signal a new request to the resource
    }
 })
}, 60000)

在處理訪問資源的新請求時,您可以使用reCaptcha 之類的內容並顯示適當的內容(覆蓋或內聯)。 執行此操作時,您還可以啟動計時器以確定它是否超過分配的時間量。 如果有,那么您可以執行另一個 ajax 請求並撤銷此人對資源的訪問權限,或者您想以任何方式處理該請求。

我會使用網絡套接字來控制需要獲取資源的所有用戶。 通過這種方式,您將知道誰連接並使用資源,當他使用完資源時,您可以讓下一個用戶使用資源等等,(這種方式可以告訴每個用戶估計他需要多長時間才能獲得資源)資源並做一些進度條)

我認為這里有兩個問題。

  1. 如何通知用戶資源可用? 定期的 AJAX 請求可能沒問題,但您也可以考慮使用長輪詢或 websockets 來接近實時通知等待的用戶。

  2. 如何找出用戶仍在使用的資源? 如果您想捕捉人類用戶未在頁面上執行任何操作的時刻,您可以跟蹤鼠標移動/點擊或鍵盤按鈕按下。 如果最后 n 分鍾沒有做任何事情,頁面可能被認為是不活動的。 如果您想確保該頁面不被自動化軟件利用,您可以要求在資源被使用時每 n 分鍾填寫一次驗證碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM