2017-10-15 100 views
2

構建Web應用程序使用。檢查資源的可用性由另一個用戶

用戶可以通過它們的瀏覽器訪問服務器上的共享資源主機,但是如果UserA已經在使用Resource1,那麼在UserA發佈Resource1或直到給定時間量之前,Resource1不應該可用於UserB。

對於這部分:我選擇使用帶有元組列表(resource,currentuser)的MySQL表並運行cron任務來刪除過期的元組。

現在我想能夠通知UserA UserB想要訪問Resource1,並且如果沒有從UserA回答,那麼UserA在Resource1上失去了他的鎖定,然後該資源就可用於UserB。

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

用戶的瀏覽器定期進行AJAX調用(讓我們說每一分鐘)來證明他還活着,並且在通話時,如果另一個用戶請求了相同的資源,他必須挑戰一個服務器在給定的時間內請求(例如驗證碼)。如果挑戰失敗,這意味着用戶不在這裏了(也許他離開了他的瀏覽器或網頁不重點)。

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

上午我以下的最佳路徑?

回答

1

是的,你已經概述什麼是好的。使用Ajax也是完全正常的,特別是如果你只是每分鐘輪詢一次。

例如,假設您具備以下條件:

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

當處理訪問資源的新的要求,你可以使用類似reCaptcha和顯示屏,但是適當的(重疊或內聯)。當你這樣做時,你也可以啓動一個計時器來確定它是否超出了分配的時間量。如果有,那麼你可以做另一個Ajax請求並且撤銷這個人對資源的訪問,或者你想要處理它。

0

我會用網絡套接字來控制所有需要獲得該資源的用戶。 這樣你就可以知道誰連接並使用了資源,當他完成使用它時,你可以讓下一個用戶使用資源等等( )(這種方式可以告訴每個用戶估計他將花費多少時間得到資源,並做一些進度吧)

0

我認爲這裏有兩個問題。

  1. 如何通知用戶資源可用? 定期AJAX請求可能是正確的,但你也可以考慮長輪詢或WebSockets的去接近實時通知用戶等待。

  2. 如何找出用戶仍在使用的資源? 如果您想捕捉人類用戶在頁面上沒有做任何事情的時刻,您可以跟蹤鼠標移動/點擊或鍵盤按鈕按下。如果在最後n分鐘內沒有任何操作,該頁面可能被視爲無效。 如果您想確保該網頁未被自動化軟件利用,您可以要求在n分鐘內使用資源時填寫一次captcha。