我的工作类似于引擎收录的东西(是的,这 是 通用的),但允许多个用户编辑。明显的问题是多个用户试图编辑同一文件。我正在考虑在一个用户使用文件时锁定文件的方法(这不是最佳解决方案,但我不需要太复杂的东西),但是为了防止/警告用户,我显然需要监视每个用户的编辑会话的系统。使用数据库和Ajax,我正在考虑两个解决方案。
第一种方法是让编辑页面以任意间隔(例如一分钟)对服务器执行ping操作,然后它将更新数据库中的编辑会话条目。然后,下一次脚本请求编辑时,它将检查最近的ping,如果最近一次是在任意任意时间之前(例如5分钟),则我们假定先前的用户已经退出,可以再次编辑该文件。当然,此方法的问题在于,先前用户已经放弃的假设仅仅是一个假设。他可能会出现不稳定的wi- fi连接,只好退出了十分钟,一直都在窗外。
当然,要解决 此 问题,我们必须让服务器响应来自先前关闭的会话的新请求时出现错误,并告诉客户端向用户指出他的会话已结束,然后进行处理例如,将其另存为服务器上的另一个文件并要求用户手动合并等。不言而喻,这对于最终用户而言相当可怕。
因此,我想到了另一种解决方案。unload当用户的会话结束时,也有可能触发事件,但是我不确定这是否可靠。
unload
有人对这个问题有其他更优雅的解决方案吗?
如果您希望对文件的并发编辑次数很少,则可以只在db中存储文件的版本号,并且当用户将文件下载到浏览器中时,他们也会获得版本号。如果版本号匹配,则只允许他们上载更改。第一个上传胜利。当检测到冲突时,您应该发送回最新文件和用户的更改,以便用户可以手动合并更改。优点是,即使是同一用户同时进行两次编辑,此方法也可以使用。如果该功能最终被频繁使用,则可以添加类似于diff工具使用的客户端合并(但在这种情况下,您可能需要保留旧版本)。