【问题标题】:Determining whether or not someone has a webpage open确定某人是否打开了网页
【发布时间】:2015-01-09 02:13:31
【问题描述】:

我目前正在设计一个将使用 MVC4 构建的 Web 应用程序。

系统的要点是有一个显示记录列表的主视图。记录将在生成时添加到网格中。用户可以在“编辑”类型的视图中打开记录。

其中一个要求是,如果一个用户在“编辑”视图中打开了一条记录,而另一个用户尝试打开同一条记录,则将通知第二个用户第一个用户当前正在处理该记录。

有人要求我避免使用任何类型的锁定机制。他们只是想知道其他人已经打开了它。

这样的事情可能吗?我一直在绞尽脑汁却不知所措。

【问题讨论】:

  • 在没有明确“避免任何类型的锁定机制”的含义的情况下,答案是“否”——您需要以某种方式/某处存储有关正在进行的编辑的信息,并且一旦您这样做就可以被视为“锁定”机制”。
  • 基本上他们想要避免“硬锁”或会阻止其他用户访问记录的锁。这样做的原因是因为他们遇到了锁没有被正确释放的问题,这导致了问题。后端技术是 MUMPS,虽然它有一些本机锁定机制,但由于我们必须从 .net 访问数据的方式,这些机制显得有些无用。

标签: c# .net asp.net-mvc-4 web


【解决方案1】:

您应该使用optimistic locking 来实现它(实际上,没有锁定...查看链接以了解有关此方法的更多信息)或最后保存记录wins .

另一方面,我认为您应该以与实际锁定相同的方式实现该通知,但没有锁定。

当用户 A、B、C、D、N 开始某个记录编辑时,您的系统应该意识到这一点,并使用编辑所谓记录的用户标识符存储一些临时全局状态。存储此数据后,应实时通知所有人有人已开始编辑该记录(例如,您的视图可能会显示正在编辑该记录的用户的用户名)。

您将如何实时通知所有人?答案是SignalR,即abstraction over WebSockets and other protocols/approaches to real-time Web development。如果您想了解有关如何在实际项目中实施 SignalR 的更多信息,请查看这篇 getting started with SignalR 2 文章。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 2012-04-03
    • 2013-09-20
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    相关资源
    最近更新 更多