假设A B两个人在同一时间开始协同编辑,也因为他们是同时间开始协同编辑的,因此命令的执行是顺序的,且报表呈现内容在AB两人面前是一致的。
---> 首先这个假设就不成立,不可能会有A,B完全同时的情况,即使秒级一样还会有毫秒级。即使毫秒级一样也会根据处理的先后顺序而排出一个先后顺序,所以这种情况不成立。
假设中途C进来参与填报了,此时C进去后的报表内容是AB两个人未开始编辑前的“起始内容”,就出现了报表呈现的内容不一致的情况。
---> 设计是以编辑退出才会进行同步,所以C进来时候只会有两种状态,他在A,B编辑退出前还是退出后,如果是退出前,那么看到的是A,B编辑前的内容而A,B编辑完成后还会触发websocket将内容同步给C,如果是编辑完成后,那么他进来的时候看到的就是A,B编辑后的内容,所以也没有问题。
是否应该在每次做了一次命令操作后自动保存最新的报表json,通过websocket发送给其他人来保持最新的报表json?这样做是否效率太低了?有没有好的解决方法呢?
--->
博客中只是介绍其原理,以及简单的验证可行性。并不是说那个例子就能直接投入实际使用了。实际中当然不是每次都发json,太冗余。而这部分实际上根据每人对在线协同的理解不同以及业务场景的不同也有着不同的处理方式,不如设置一个命令堆栈,按照堆栈的大小,当堆栈满了之后再做保存等。这些都是在基础上的优化方案,不再博客的讨论之中。博客只是讲述原理以及可行性。 |