使用Angular的实时数据

时间:2015-11-26 16:01:51

标签: php angularjs real-time

我想创建一个包含数据的网页,这些数据可以在实时编辑。

用户将看到实时数据并可以对其进行编辑,例如“Google表格”,其中每个人都可以编辑同一个文件并实时查看其他更改。

我将使用PHP,MYSQL,AngularJS。

我想以最好的方式咨询你如何做到这一点,这是我想到的一些观点:

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

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

  3. 有什么比角度轮询实时提取数据更好的方法?

  4. 当用户编辑文本字段时我想在没有“提交”或保存按钮的数据库中更新它,我想在3秒后保存数据,还有更好的想法吗?

  5. 谢谢,

1 个答案:

答案 0 :(得分:2)

<强> 1 我建议你在AngularJS控制器中有一个对象数组或类似的数据结构,其中包含字段。当用户开始编辑某个字段时,您可以在数据结构的字段对象中将isEditing设置为true。每当更新进入时,您都会遍历数据结构,只更新isEditing未设置/不是真的字段。

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

<强> 2 要锁定某个用户正在处理的字段,可以将locked列添加到包含这些字段的数据库表中。每当用户想要开始编辑时,都会发生以下情况:

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

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

第3: 如果没有客户端发出请求,PHP上的PHP就无法向客户端发送数据。您需要向PHP添加WebSocket支持(例如http://socketo.me/,但尚未尝试过)。

如果您对能够开箱即用的服务器平台感兴趣,可以查看http://nodejs.org。当您计划使用Node.js时,我建议使用http://socket.io/以获得最大的浏览器兼容性。 (它包括用户浏览器不支持WebSockets时的后备)

<强> 4 如果值与上一次保存不同,则可以每 x 保存当前值。这比总是保存值更有效。您需要将以前保存的值保存在变量中。