找回密码
 立即注册

QQ登录

只需一步,快速开始


注册会员   /  发表于:2022-3-31 17:44  /   查看:1556  /  回复:1
2金币
目前我在论坛上搜寻到的有关多人协同的实现方案,
基本都是将封装过的命令发到服务端,之后通过websocket发同步指令。
参考文章:https://gcdn.grapecity.com.cn/showtopic-82518-1-1.html


我按照上述文章实践过后,有一个疑问。

假设A B两个人在同一时间开始协同编辑,也因为他们是同时间开始协同编辑的,因此命令的执行是顺序的,且报表呈现内容在AB两人面前是一致的。

假设中途C进来参与填报了,此时C进去后的报表内容是AB两个人未开始编辑前的“起始内容”,就出现了报表呈现的内容不一致的情况。

即通过websocket分享的只是指令,而并不是报表的内容。

如何做到 无论多少个人在什么时间点进来,他们编辑所呈现的内容都是一致的?

是否应该在每次做了一次命令操作后自动保存最新的报表json,通过websocket发送给其他人来保持最新的报表json?这样做是否效率太低了?有没有好的解决方法呢?


最佳答案

查看完整内容

假设A B两个人在同一时间开始协同编辑,也因为他们是同时间开始协同编辑的,因此命令的执行是顺序的,且报表呈现内容在AB两人面前是一致的。 ---> 首先这个假设就不成立,不可能会有A,B完全同时的情况,即使秒级一样还会有毫秒级。即使毫秒级一样也会根据处理的先后顺序而排出一个先后顺序,所以这种情况不成立。 假设中途C进来参与填报了,此时C进去后的报表内容是AB两个人未开始编辑前的“起始内容”,就出现了报表呈现的内 ...

1 个回复

倒序浏览
最佳答案
最佳答案
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-3-31 17:44:58
来自 2#
假设A B两个人在同一时间开始协同编辑,也因为他们是同时间开始协同编辑的,因此命令的执行是顺序的,且报表呈现内容在AB两人面前是一致的。
---> 首先这个假设就不成立,不可能会有A,B完全同时的情况,即使秒级一样还会有毫秒级。即使毫秒级一样也会根据处理的先后顺序而排出一个先后顺序,所以这种情况不成立。

假设中途C进来参与填报了,此时C进去后的报表内容是AB两个人未开始编辑前的“起始内容”,就出现了报表呈现的内容不一致的情况。
---> 设计是以编辑退出才会进行同步,所以C进来时候只会有两种状态,他在A,B编辑退出前还是退出后,如果是退出前,那么看到的是A,B编辑前的内容而A,B编辑完成后还会触发websocket将内容同步给C,如果是编辑完成后,那么他进来的时候看到的就是A,B编辑后的内容,所以也没有问题。

是否应该在每次做了一次命令操作后自动保存最新的报表json,通过websocket发送给其他人来保持最新的报表json?这样做是否效率太低了?有没有好的解决方法呢?
--->
博客中只是介绍其原理,以及简单的验证可行性。并不是说那个例子就能直接投入实际使用了。实际中当然不是每次都发json,太冗余。而这部分实际上根据每人对在线协同的理解不同以及业务场景的不同也有着不同的处理方式,不如设置一个命令堆栈,按照堆栈的大小,当堆栈满了之后再做保存等。这些都是在基础上的优化方案,不再博客的讨论之中。博客只是讲述原理以及可行性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部