1
6
|
2
2
基本方法是: 1用户A获取要编辑的文档,文档处于版本1 三。用户B发布了一些更改,包括基本版本号1 4服务器更新文档,文档现在为版本2 5用户B发布了一些更改,包括基本版本号1 6服务器回复说,自从用户开始编辑文档以来,文档已经更改,并向用户发送新文档,然后他们的版本-用户将需要执行任何将他们的更改合并到文档版本2中的操作,并发回服务器。用户现在基本上正在编辑文档版本2 7用户A发布了一些更改,包括2的版本号 你仍然可以每分钟“ping”一次,以获得当前的版本号-你已经知道他们正在编辑的版本,因此如果有新版本可用,你可以让他们知道,并让他们下载最新版本以进行更改。 这种方法的主要优点是用户从不锁定文件,因此不需要任何任意的“超时”。 |
3
0
有一个名为“active\u edits”或类似的表,其中有一列表示文档id、用户和上次更新时间。假设ping时间为1分钟,超时时间为5分钟。所以用例应该是这样的: 鲍勃打开一个文件。它检查上次更新的时间。如果超过5分钟,用Bob和当前时间更新表。如果不是,则说明其他人正在处理文档,因此请给出错误消息。假设文档没有被编辑,Bob会处理文档一段时间,客户端每分钟ping一次更新时间。 我会说 做 包括一个“完成编辑”按钮和一个onunload处理程序。据我所知,是奥恩洛德 是片状的,但不妨加上它。这两种方法都会向服务器发送一个只发送邮件的帖子,说Bob已经完成了。即使Bob没有点击finishediting,onunload也会消失,最坏的情况是另一个用户需要再等5分钟才能编辑。好处是,如果这些正常工作(一个公平的假设),那么系统工作得更好一些。 如果您描述了一个Bob的无线连接不好或需要休息的地方:我会说这不是什么大问题。ping函数应该确保自从Bob上次ping之后文档没有被其他人接管。如果有,只需给Bob一条消息,说“其他人已经开始处理文档”,并给他们重新加载的选项。 编辑:还有,我会调查 window.onbeforeunload ,而不是onunload。我相信它执行得更早。我相信这是功能网站(包括slashdot)使用,让你确认你真的想离开网页。我认为除了Opera,其他主流浏览器都可以使用。 |
4
0
How do you manage concurrent access to forms? ,我不会尝试实现悲观锁定。在无状态环境中可靠地工作实在太难了。相反,我会使用乐观锁定。但是,在本例中,我使用了类似于文件的SHA哈希的内容来确定自用户上次读取该文件以来该文件是否发生了更改。对于每个更改文件的请求,您将运行文件字节的SHA哈希,并将其与第一次读取数据时提取的版本进行比较。如果已更改,则拒绝更改并强制用户再次进行编辑(提取文件内容的新副本),或者提供更高级的冲突解决方案。 |
Softly · 单选按钮未按预期取值 1 年前 |
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
assembler · Nextjs没有处理发布请求 1 年前 |
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
Toniq · javascript为php保存多维数组 1 年前 |