我正在实现文件服务器。目前,如果两个用户打开同一个文档,然后对其进行修改并保存更改,则文档的状态将为未定义(第一个用户的更改将永久保存或第二个用户的更改已保存)。这完全不令人满意。我考虑了两种可能的方法来解决这个问题:文件服务器:处理并发保存
第一种是在第一次打开文档时锁定文档,并在关闭文档时将其解锁。但是,如果与服务器的网络连接突然中断,文档将处于永久锁定状态。显而易见的解决方案是定期ping服务器。如果服务器未从特定客户端连续接收到K个ping(K> 1),则解锁此客户端锁定的文档。如果该客户重新出现,如果有人尚未锁定他们,文件将被再次锁定。如果客户端应用程序(运行在Web浏览器中)意外终止,这也会有所帮助,从而无法向服务器发送“退出,解锁我的文档”信号。
第二种是存储由不同用户保存的同一文档的多个版本。如果快速连续更改文档,系统将提供合并版本或选择首选版本。为了优化存储空间,只应保存文档差异(就像源代码管理软件一样)。
我应该选择什么方法,考虑到与服务器的连接可能有时缓慢且无响应?应该如何确定参数(ping间隔,快速连续间隔)?
P.S.不幸的是,我无法将文档存储在数据库中。