检查其他用户使用的资源的可用性

时间:2017-10-15 10:55:44

标签: ajax locking shared-resource

构建Web应用程序。

用户可以通过浏览器访问服务器上的共享资源主机,但是如果UserA已经在使用Resource1,则在UserA发布Resource1之前或者在给定的时间内,Resource1不应该对UserB可用。

对于这部分:我选择使用带有元组列表的MySQL表(resource,currentuser)并运行cron任务来删除过期的元组。

现在我希望能够通知UserA UserB想要访问Resource1,如果得不到UserA的回答,那么UserA就失去了对Resource1的锁定,然后资源随后可供UserB使用。

对于这部分,我想我必须使用AJAX。我考虑过以下解决方案:

用户的浏览器定期进行AJAX呼叫(让我们说每分钟)以证明他还活着并且在通话时,如果另一个用户请求了相同的资源,他必须挑战服务器请求在给定的时间内(例如验证码)。如果挑战失败,则意味着用户不再在这里(可能是他打开浏览器或网页未聚焦)。

棘手的部分是:"他必须在给定的时间内挑战服务器请求(例如验证码)"。怎么做?

我是否遵循最佳途径?

3 个答案:

答案 0 :(得分: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请求并撤销此人对资源的访问权限,或者你想要处理它。

答案 1 :(得分:0)

我会使用Web套接字来控制需要获取资源的所有用户。 通过这种方式,您将知道谁连接并使用资源,当他完成使用它时,您可以让下一个用户使用资源,等等, (这种方式可以告诉每个用户估计他需要花多少时间获取资源并做一些进度吧)

答案 2 :(得分:0)

我认为这里有两个问题。

  1. 如何通知用户资源可用? 定期的AJAX请求可能没问题,但您也可以考虑使用长轮询或websockets来实时通知等待的用户。

  2. 如何找出用户仍在使用该资源? 如果您想抓住人类用户在页面上没有做任何事情的那一刻,您可以跟踪鼠标移动/点击或按键盘按钮。如果在最后n分钟内未执行任何操作,则该页面可能被视为未激活。 如果您想确保页面不被自动化软件利用,您可以要求在使用资源时在n分钟内填写一次验证码。