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