【发布时间】:2023-03-21 01:39:01
【问题描述】:
在我的项目管理应用程序中,我想解决多个用户查看同一任务记录并且其中一个或多个用户更新某些任务数据而其他人正在查看它的问题。
这是一个场景……
用户#1查看任务#1和用户#2查看任务#1
现在用户#2更新任务#1描述
用户 #1 现在正在查看任务记录,但他的视图显示了不同的过时 描述,因为 用户 #2 刚刚更新它!更糟糕的是,他可能想自己编辑描述,这将完全覆盖用户 #2 的描述更新。
这是问题的 1 个示例。只需添加更多用户,问题就会成倍增加!
理想情况下,我会使用 Sockets 之类的东西或 Pusher.com 之类的服务来更新所有用户的数据,只要有任何用户进行了更新。然而,这个项目将在数百台服务器上运行,并且就服务器要求而言功能有限,因此套接字甚至像 Pusher 这样的服务都是不可能的!
解决方案的另一个想法是基于 Twitter 所做的。如果您查看某人的 Twitter 页面,并且他们在您加载页面时发布了新帖子。它将显示一条通知消息 DIV,告诉您有 X 条新帖子,并为您提供一个链接,让您单击以重新加载带有最新帖子的帖子流。
我相信类似的方法可以适用于我的项目。如果用户在其他用户查看该任务记录时对任何任务数据进行更新。它会在任务模式窗口上显示一条通知消息,告诉用户任务数据已更新,他们应该重新加载任务。
为了完成这项工作,我知道需要每隔一段时间发出一些 AJAX 请求。
然后,该 AJAX 请求需要比较对任务记录进行的最后更新的时间戳,并将其与查看任务记录的用户开始查看它的时间或自他们上次重新加载任务以来的时间进行比较。
我觉得我的逻辑缺少一块拼图?这是正确的还是我遗漏了什么?
谁能解释一下我该怎么做或告诉我我的想法是否正确?
我知道简而言之,我只需要确定任务最后修改的时间戳是否是在其他用户开始查看任务之后。在某些时候,虽然我觉得用户时间也应该更新?
更新
我完全忘记了 Stack Overflow 对问题和答案的确切任务!当您查看 SO 上的页面并更新答案时,它将显示一条通知消息,告诉您重新加载答案并提供重新加载答案的链接。这就是我想做的!
StackOverflow 使用 Web Sockets 来做到这一点,但在我的应用程序中,它是一个用于许多不同服务器配置的插件,我不能使用 Sockets。我正在尝试使用 AJAX 实现类似的结果。即使它是每 30 秒发出一次 AJAX 请求以获取任务修改时间并将其与另一个进行比较以确定用户是否应该重新加载任务数据在我的情况下也可以工作
【问题讨论】:
-
您可以从dev-metal.com/architecture-stackoverflow 开始,尤其是更新#3 和highscalability.com/stack-overflow-architecture 和meta.stackexchange.com/questions/10369/… 是我找到的一些相关链接。还有更多,但这应该可以帮助您入门。我希望这会有所帮助。
-
@Fred-ii- 谢谢,据我所知,他们在这里使用 Web 套接字来做这件事,这是有道理的,但在我的情况下,最好的路线是对将使用我的应用程序的用户做的受到限制并且不能使用套接字,所以我认为我应该能够使用 AJAX 轮询技术实现相同的结果
-
不客气,杰森。我和你的想法一样。但是,我在该领域还不够精通,无法进一步发表评论(我知道一些,但不像 Stack 上的其他成员那样),但他们也可能同时使用这两种方法。您可能只需使用 AJAX 轮询技术就可以侥幸逃脱。
-
@Fred-ii- 在这里相同。我知道 5 到 6 年前,AJAX 方法被到处使用,因为它是我们当时所拥有的!所以我知道这是可能的。它有缺点,但就我而言,这是我最好的选择,因为我的应用程序是一个插件,可以安装在许多服务器配置上。它在 SugarCRM 内部,因此至少对于企业中将使用它的大多数用户来说,它是私人流量,所以即使是每 15-30 秒发出的 AJAX 请求来比较 2 个时间戳,我相信也能起到作用。如果是我的选择,我会使用 Pusher.com 并在 5 分钟内完成!不过希望其他人也能加入这里=)
-
@JasonDavis 您最终使用了基本的 AJAX 轮询技术吗?
标签: javascript php mysql