监视用户会话以防止编辑冲突

Yi *_*ang 5 javascript ajax session conflict

我正在研究类似于pastebin的东西(是的,它通用的),但允许多个用户编辑.显而易见的问题是多个用户试图编辑同一个文件.我正在考虑当一个用户正在处理文件时锁定文件(这不是最好的解决方案,但我不需要太复杂的东西),但为了防止/警告用户我显然需要一个用于监控每个用户的编辑会话的系统.使用数据库和ajax,我正在考虑两个解决方案.

第一种方法是让编辑页面以任意间隔(例如一分钟)ping服务器,它将更新数据库中的编辑会话条目.然后,下一次脚本请求编辑时,它会检查最近的ping,如果最近一次是另一个任意时间,比如五分钟,那么我们假设前一个用户已退出,并且可以再次编辑该文件.当然,这种方法的问题在于前一个用户退出的假设只是一个假设.他可能有一个片状的Wi-Fi连接,只是在窗户仍然打开的情况下辍学十分钟.

当然,为了解决这个问题,我们必须让服务器响应来自先前关闭的会话的新请求并发出错误,告诉客户端指出用户他的会话已经结束,然后处理它比方说,将其保存为服务器上的另一个文件并要求用户手动合并等等.不言而喻,这对最终用户来说相当可怕.

所以我想到了另一个解决方案.unload当用户的会话结束时,也可能会触发事件,但我无法确定这是否可靠.

有没有人对这个问题有任何其他更优雅的解决方案?

Mr.*_* 安宇 6

如果您希望文件的并发编辑次数较少,则可以在db中存储该文件的版本号,当用户将文件下载到浏览器中时,它们也会获得版本号.如果版本号匹配,则只允许他们上传更改.第一个上传胜利.检测到冲突时,您应该发回最新文件和用户的更改,以便用户可以手动合并更改.优点是,即使同一个用户同时进行两次编辑,这也可以工作.如果此功能最终被频繁使用,您可以添加类似于diff工具使用的客户端合并(但在这种情况下您可能需要保留旧版本).