1
4
已经有一种可接受的形式来传递这种“差异”信息。它叫 Unified Diff . 您应该能够在客户端变量中保留“原始文本”和“修改文本”,然后在javascript中生成diff(通过diff match补丁),将其连同散列一起发送到服务器,并在服务器上重新构造它(使用diff match补丁或unix“补丁”程序)。 在第一次将原始文本发送给客户机时,您可能还需要考虑包含“版本”(或修改日期)。然后在客户端发送到服务器的“diff请求”中包含相同的版本(或日期)。在应用diff之前,请验证服务器上的版本,以确保在进行修改时服务器的文本副本没有与客户端的副本不同。(当然,为了使其正常工作,您需要在每次主副本更新时更新服务器上的版本号)。 |
2
1
你有一个非常有趣的方法。但是如果文本文件真的太大了,每次上传都需要太多的时间,为什么要把整个东西都发送给客户呢?客户真的需要接收整个5mb文本文件吗?难道不能只送他需要的东西吗?
不管怎样,对于你的问题:
diff
. 对于算法,请阅读
here
. 这可能是一种提交更改的方法,并为其指定格式。你只需要重建
对于损坏问题:您不必担心您的日期会在途中损坏,因为HTTP所基于的TCP协议看起来所有内容都不会损坏。你应该担心的是连接重置。也许你能做点握手之类的事?当客户端向服务器发送更新时,服务器应用修改并保留文件的一个旧版本。为了确保客户机已经从服务器接收到修改成功的批准(这就是发生conneciton重置的地方),客户机将另一个ajax请求发送回服务器。如果这个文件在定义的时间内没有到达服务器,则会在服务器端重置该文件。
|
3
1
这听起来像一个版本控制系统(CVS、SVN、Git、Bazaar)已经很好地解决了的问题。 它们都很容易在服务器上设置,您可以通过PHP与它们通信。
你不会得到你要求的“只发送更新”功能。我不知道这对你有多重要。就带宽而言,纯文本发送确实非常便宜。 就我个人而言,我可能会做出类似维基的妥协。将整个文本分解成更小的语义连贯的块(章节,甚至段落),在客户端确定哪些块被编辑过(不进入字符级别),然后发送这些块。 然后,服务器可以用一个diff来回答,由您的版本控制系统生成,这是他们非常有效的做法。如果希望允许并发更改,则可能会遇到编辑器必须手动合并的情况。 另一个普遍的暗示可能是看看谷歌对Wave做了什么。我必须在这里保持一般性,因为我自己并没有真正详细地研究过它,但我似乎还记得有一些关于它们如何解决实时并发编辑问题的文章,这似乎正是您想要做的。 总之,我相信你计划解决的问题远非微不足道,已经有很多工具可以解决相关的问题,我个人会妥协并重新制定方法,以减少工作量。 |
Softly · 单选按钮未按预期取值 1 年前 |
NovoMannen · 导航中的下拉菜单在内容后面重叠 1 年前 |
eXor420 · 如何在脚本标记中使用导出的函数? 1 年前 |
IonicMan · 剑道网格在宽度过大时不显示某些列 1 年前 |
Kernier · 如何将数学公式支持添加到StacksEditor? 1 年前 |
Md. Ibrahim · CSS网格项溢出小屏幕滚动 1 年前 |
Akshay mek · Vscode扩展建议不适用于某些文件夹 1 年前 |