如何在 Web 应用程序中制作实时并发锁? [关闭]

Posted

技术标签:

【中文标题】如何在 Web 应用程序中制作实时并发锁? [关闭]【英文标题】:How to make a real time concurency lock in a web application? [closed] 【发布时间】:2016-05-31 19:39:49 【问题描述】:

我正在开发一个 Web 应用程序,我必须在其中显示,比如说,一个任务列表。 我需要做的是一旦用户打开一个任务(即在他的浏览器中打开它),它会从所有其他用户列表中删除,或者它显示该任务已被执行,没有人可以打开已经打开的任务别人。 此外,我需要一旦用户关闭任务(例如用户关闭他的浏览器),它就会重新添加到其他用户的任务列表中。 请问我该怎么做? WebSocket 在客户端?还有其他更好的选择吗?如何在服务器端进行管理? 谢谢

【问题讨论】:

到目前为止你做了什么来实现这种行为?您使用的技术堆栈是什么? (例如,前端的 JQuery,中间件的 Spring 等)。您可以在任务的“单击”时触发 ajax 查询,并让服务器处理从“任务池”中删除该任务,并在用户“关闭”任务时触发另一个 ajax 查询。在这一点上,我只能告诉你。 直到我对“可行性”有了清晰的认识才开始编码,我考虑在客户端打开一个 websocket,用一段时间(true)来保持锁定任务,但不确定,我以前从未做过这种事情(使用 websocket)只阅读了一些文档,但我认为 - 例如 - 100.000 websocket 同时连接我的服务器检查锁不会'不是个好主意... 如果您希望一个用户的“打开任务”活动立即对所有其他用户产生影响,那么像基于 ajax 的轮询之类的黑客攻击似乎不是一个好主意。 Websockets 将是首选方法。看看这个帖子的答案link 顺便说一句,我不知道为什么你的问题被否决了。对我来说似乎是一个合法的问题。 取决于您如何实施最终解决方案。由于每个页面都会创建一个 websocket,并且如果它们都在不同的选项卡中“活着”,跨越 100 个用户,您可能会遇到最终创建大量 websocket 连接的场景。但是,您可以使用 Web Workers 之类的东西。或管理 websocket 的框架。我对这些了解不多,因此您可以自行研究,看看如何有效地管理 websocket 连接。祝你好运! 【参考方案1】:

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

Ajax(和长轮询)

使用 Ajax,您可以每 X 秒轮询一次服务器以获取实现您所描述的行为所需的数据。这可能有效,但不是推荐的方法。在this thread 上阅读原因。

WebSocket

就像您在桌面应用程序上使用的套接字(因此得名)一样,您可以打开 WebSocket 连接(不是 HTTP 连接),根据需要保留它并仅在完成后关闭它它。这是让数据在客户端和服务器之间不断流动的首选方式。也是supported by almost every major browser out there

还有其他技术,例如 WebRTC 和服务器发送事件,但考虑到您对问题的描述,这些可能不是您想要的。

题外话:我不知道为什么你的问题被否决了,在我看来是合法的。

【讨论】:

以上是关于如何在 Web 应用程序中制作实时并发锁? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何用颤振制作一个mysql实时数据库? [关闭]

如何使用图表制作实时仪表板[关闭]

在 Asp.net / Asp.net mvc 中进行实时 Web 体验的方法是啥? [关闭]

制作用于我的 iOS 应用程序的 Web 服务器 [关闭]

web开发中的两把锁之数据库锁:(高并发--乐观锁悲观锁)

在 Java EE 6 中制作 Java Web 应用程序需要学习啥? [关闭]