Angular 的实时数据

Real time data with Angular

我想用数据创建一个网页,这个数据可以实时编辑。

用户将实时查看数据并可以对其进行编辑,例如 "Google Sheets" 每个人都可以编辑同一个文件并实时查看其他人所做的更改。

我将使用 PHP、MYSQL、AngularJS。

我想请教您如何以最好的方式做到这一点,这是我想到的一些要点:

  1. 使用angular每隔X秒轮询一次来实时更新页面数据,但是如果用户编辑其中一个字段,我如何防止通过轮询更新该特定字段?

  2. 如何锁定用户正在编辑的特定字段,以防止 2 个用户实时编辑同一字段

  3. 有比angular轮询更好的实时拉取数据的方法吗?

  4. 当用户编辑文本字段时我想在没有 "submit" 或保存按钮的情况下在数据库中更新它,我想在 3 秒后保存数据,有什么更好的主意吗?

谢谢,

1: 我建议您在 AngularJS 控制器中拥有一个对象数组或类似的数据结构,其中包含字段。当用户开始编辑某个字段时,您可以在数据结构的字段对象中将 isEditing 设置为 true。每当有更新出现时,您都会循环遍历您的数据结构,并且只更新未设置 isEditing / 不正确的字段。

为了使其更加实时,而不是轮询,设置 WebSockets 并让服务器在字段更改时向所有编辑器广播字段的最新值。

2: 要锁定某个用户正在处理的字段,您可以向包含该字段的数据库 table 添加一个 locked 列。每当用户想要开始编辑时,就会发生以下情况:

  • 用户请求编辑字段
  • 服务器检查字段是否被锁定
  • 如果该字段未锁定,则允许用户编辑该字段并且服务器将 locked 列设置为 true 或用户名,具体取决于您的需要。
  • 如果该字段被锁定,则不允许用户编辑该字段

当用户在编辑字段后保存它时,您应该将 locked 列设置为 false。每当编辑用户断开连接时,您可能还应该将 locked 列设置为 false。

3: PHP 在没有客户端发出请求的情况下,它自己无法将数据发送到客户端。您需要将 WebSocket 支持添加到 PHP(例如 http://socketo.me/,但还没有尝试过)。

如果您对能够开箱即用的服务器平台感兴趣,可以查看 http://nodejs.org. When you plan on using Node.js, I suggest using http://socket.io/ 以获得最大的浏览器兼容性。 (它包括当用户浏览器不支持 WebSockets 时的回退)

4: 您可以每隔 x 保存当前值,如果该值与之前保存的值不同 。这比总是保存值更有效。为此,您需要将之前保存的值保存在一个变量中。