【问题标题】:How to make a real time concurency lock in a web application? [closed]如何在 Web 应用程序中制作实时并发锁? [关闭]
【发布时间】: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 连接。祝你好运!

标签: java


【解决方案1】:

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

  • Ajax(和长轮询)

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

  • WebSocket

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 2016-10-02
    • 2014-10-20
    • 1970-01-01
    • 2012-08-31
    • 2014-02-05
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多