我想创建一个包含数据的网页,这些数据可以在实时编辑。
用户将看到实时数据并可以对其进行编辑,例如“Google表格”,其中每个人都可以编辑同一个文件并实时查看其他更改。
我将使用PHP,MYSQL,AngularJS。
我想以最好的方式咨询你如何做到这一点,这是我想到的一些观点:
每隔X秒使用角度轮询实时更新页面数据,但如果用户编辑其中一个字段,我如何通过轮询来阻止更新此特定字段?
如何锁定用户正在编辑的特定字段,以防止2个用户实时编辑同一字段
有什么比角度轮询实时提取数据更好的方法?
当用户编辑文本字段时我想在没有“提交”或保存按钮的数据库中更新它,我想在3秒后保存数据,还有更好的想法吗?
谢谢,
答案 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 秒保存当前值。这比总是保存值更有效。您需要将以前保存的值保存在变量中。