【发布时间】:2020-01-17 23:37:06
【问题描述】:
我有一个 Nodejs 应用程序,它使用 Mysql 作为数据库、快递和护照来管理用户身份验证。一次可以有 20-30 个用户连接到我的 Nodejs 应用程序。
现在,在我的应用程序中的某些页面中,多个用户可以同时处理相同的内容。因此,如果一个用户更改了字段的值,其他用户也会看到该更改。到目前为止,为了实现这一点,我只是使用每 5 秒运行一次的 Setinterval 函数,向 Nodejs 服务器发送一个 ajax 请求,然后在必要时重新绘制用户字段。到目前为止,这一切都很好,但现在我已经决定,我希望我的应用程序中的其他页面也能以这种方式工作。这意味着我的 Nodejs 服务器每秒钟都会发生多次回发以运行 mysql 查询。我是 Nodejs 的新手,我不确定这是否是处理这种情况的最佳方式。
如果有一种方法可以向客户端发送新的字段数据,而无需客户端请求并为它们重绘 DOM,我正在徘徊。
【问题讨论】:
-
从服务器到客户端的事件驱动更新?听起来 websockets 可以很好地解决问题
-
旁注:据我所知,没有人以这种方式进行并发管理;如果用户下载的旧属性已被其他人更改,而第一个用户打开它们进行编辑,则通常的模式是拒绝保存。用谷歌搜索的术语来说,它被称为“乐观并发”,并且比实施一个系统更便宜和更有效,用户看到其他人在他们正在编辑年龄的同一记录中输入新员工姓名。
-
@CaiusJard - 听起来您还没有使用为同时多用户使用而设计的现代工具。只需查看两个人打开相同共享文档的 Google 文档。我们既可以编辑文档,也可以实时查看对方的编辑。它非常有用,是一种更现代的协作方式,而不是编辑、保存、发送给其他人或编辑、保存因未连接的编辑而被拒绝。
-
@jfriend00 我认为他的观点是操作转换真的很难,而且简单地阻止对错误版本的文档的更新更便宜/更容易。并不是说它不应该/不能做。
-
@Brad - 在 OP 描述的系统中,他们只是希望其他编辑者看到已经提交到数据库的更改,因此他们总是在查看数据库中的最新数据,所以他们是他们在查看已更改的旧数据时不太可能进行编辑。在许多系统中,这是一个非常理想的可用性特性,不应该被忽视,因为对用户不友好的实现更容易编码。这正是我们获得不良客户端/服务器应用程序的原因。