2017-10-15 63 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。