如何在Web应用程序中创建实时协调锁?

问题描述:

我正在开发一个Web应用程序,在这个应用程序中我必须展示一下任务列表。
我需要做的是,一旦用户打开一个任务(即在其浏览器中打开),它将被删除所有其他用户列表,或者表明该任务是采取,没有人可以打开一个任务,那就是已经被别人打开。

此外,我需要的是一旦用户关闭任务(例如用户关闭浏览器),它得到重新添加到其他用户的任务列表。

我该怎么做? WebSocket在客户端?任何其他更好的选择?
如何在服务器端进行管理?

谢谢如何在Web应用程序中创建实时协调锁?

+1

你做了什么,直到这一点来实现这一行为呢?您正在使用的技术堆栈是什么? (例如前端的JQuery,中间件的Spring等)。您可以在任务的'点击'时触发ajax查询,并让服务器从'任务池'中移除该任务,并在用户“关闭”任务时触发另一个Ajax查询。在这一点上,这是我可以告诉你的。 –

+0

直到我清楚了解这个“可操作性”之后,才开始编码,我想在客户端打开一个websocket,并且花了一段时间(真)来锁定任务,但不确定,我从来没有做过这种事情(使用websocket)只读取一些文档,但我认为与 - 例如 - 100.000 websocket连接我的服务器在同一时间检查锁不会是一个好主意.. 。 – hereForLearing

+0

刚才看到您的编辑,你可以说我使用的春天(其实我使用Grails的,但它是一回事,Grails的这里有较少的用户,以便者优先,使其成为Java的问题),我读过有关使用Ajax来做到这一点的文章,但不建议,因为来自服务器的答案可能乱 – hereForLearing

有两种解决方案(据我所知),您的问题:

  • 阿贾克斯(和长轮询)

使用Ajax可以轮询服务器每隔X秒为实现所描述的行为所必需的数据。这可能会起作用,但它不是推荐的方法。阅读为什么在this thread

  • 的WebSocket

就像你在一个桌面应用程序(因此得名),你可以打开一个WebSocket连接(而不是HTTP之一)使用的插座,把它只要根据需要,只有在完成后才能关闭它。这是数据在客户端和服务器之间不断流动的首选方式。这也是supported by almost every major browser out there

为的WebRTC和服务器发送的事件其他技术,例如,但考虑您的问题描述,这些可能不是你要找的内容。

题外话:我不知道为什么你的问题已经downvoted,看起来合法的给我。