g***j 发帖数: 1275 | 1 在google doc的spreadsheet中,如何实现实时的更新。
就是用户Alice在机器A上开了一个spreadsheet a, 用户Bob在机器B上开了一个
spreadsheet b, Alice在a上输入一个数据,要求Bob能够尽可能实时看到。 |
k******4 发帖数: 94 | 2 说个粗略的想法。Alice 和 Bob之间通过P2P连接,互相之间保持文件的一致性。同时
把文件的定期push到server上去。
暂时想到的几个讨论的点,更新文件的时候,可以发送对文件的update或者整个文件,
二者之间怎么选择。Alice和Bob是通过tcp还是udp连接。如果用户输入的比较快的时候
,是输入之后立马更新还是有一小段延迟之后再给对方发送update。如果断网了怎么处
理。
当然上面那些问题说出来都很容易回答,不知道在讨论的时候提出这些是否对面试有帮
助,还请大牛给点意见。
【在 g***j 的大作中提到】 : 在google doc的spreadsheet中,如何实现实时的更新。 : 就是用户Alice在机器A上开了一个spreadsheet a, 用户Bob在机器B上开了一个 : spreadsheet b, Alice在a上输入一个数据,要求Bob能够尽可能实时看到。
|
p*****3 发帖数: 488 | 3
是不是可以这样,
如果有额外的server的话把所有的修改push到server上,然后server本地记录后再把修
改push到Alice和Bob的机器,重新连接的话再sync所有内容。如果不是重新连接的话不
用sync, 以log的形式更新,比如在pos i上insert了string x, pos j上删除了长度为z
的string。
【在 k******4 的大作中提到】 : 说个粗略的想法。Alice 和 Bob之间通过P2P连接,互相之间保持文件的一致性。同时 : 把文件的定期push到server上去。 : 暂时想到的几个讨论的点,更新文件的时候,可以发送对文件的update或者整个文件, : 二者之间怎么选择。Alice和Bob是通过tcp还是udp连接。如果用户输入的比较快的时候 : ,是输入之后立马更新还是有一小段延迟之后再给对方发送update。如果断网了怎么处 : 理。 : 当然上面那些问题说出来都很容易回答,不知道在讨论的时候提出这些是否对面试有帮 : 助,还请大牛给点意见。
|
k******4 发帖数: 94 | 4 关于update的问题,个人觉得不一定要把所有的修改都push上去。比如现在文件size是
1KB,然后我觉得写错了,全部删除,再写上一个10B的字符串。这个时候可能push上文
件最后的内容就好了。总之文件的操作是个删除,增加,修改的过程。每隔一段时间,
计算文件上个push过的版本和现在版本之间的不同,数据量为Delta,还有当前文件的
大小S,比较Delta和S的大小,决定是push update还是全部文件。
为z
【在 p*****3 的大作中提到】 : : 是不是可以这样, : 如果有额外的server的话把所有的修改push到server上,然后server本地记录后再把修 : 改push到Alice和Bob的机器,重新连接的话再sync所有内容。如果不是重新连接的话不 : 用sync, 以log的形式更新,比如在pos i上insert了string x, pos j上删除了长度为z : 的string。
|
w****e 发帖数: 23 | 5 P2P显然是不合适的:
1. 用户的数量其实是没有限制的。同时编辑的用户越多,P2P导致复杂度与单纯的连服
务器差距越大。
2. 在遇到网络异常等意外时,P2P各个端点很难处理。这个时候由服务端来运算,就简
化很多。
3. google doc的spreadsheet要支持所有的浏览器和平台,不是所有的用户都支持HTTP
以外的协议。
另外云平台当然要云计算,否则Google要去做的就是桌面软件了。
从通讯上来讲,我觉得就简单的假设用HTTP协议的,具体是用Ajax还是客户端呼叫Web
Service都无所谓。
从更新内容上来讲,我认为参考数据库的增量备份模式,更新的是操作而非内容现状,
这样的优点是:
1. 减少通讯量;
2. 操作作为内容的一部分存储在服务器,支持版本恢复;
3. 给了服务器足够的信息来处理各种意外,比如用户因断网而导致的输入冲突。
同步处理与意外:
1. 提交数据:用户的任何输入都要及时提交服务器,以提交同步效率。(你在一个单
元格内不停的输入但是不回车,算不上完成输入)
2. 更新数据:任何提交的时候都更新数据,另外如果没有提交数据,也必须保障每隔
固定间隔刷新数据。
3. 更新数据:与提交数据每步骤都提交不同,更新来的数据是别人的操作经过服务器
合并的结果,既不是每隔步骤的操作,也不是整个文档的Reload。
4. 锁机制:在单元格或者区域被选中状态,其他用户可以更新为此区域被锁的状态。
5. 离线操作与冲突: 这个可以参考其他的版本控制工具中的Merge。 |
z*********8 发帖数: 2070 | 6 这个我觉得不对, 这些doc操作都有version的, 比如还是该把每次操作记录下来
【在 k******4 的大作中提到】 : 关于update的问题,个人觉得不一定要把所有的修改都push上去。比如现在文件size是 : 1KB,然后我觉得写错了,全部删除,再写上一个10B的字符串。这个时候可能push上文 : 件最后的内容就好了。总之文件的操作是个删除,增加,修改的过程。每隔一段时间, : 计算文件上个push过的版本和现在版本之间的不同,数据量为Delta,还有当前文件的 : 大小S,比较Delta和S的大小,决定是push update还是全部文件。 : : 为z
|
k******4 发帖数: 94 | 7 考虑到前面大牛提到的版本回复,确实需要保存。另外,再多个用户的情况下。确实通
过服务器更新更好。
这个我觉得不对, 这些doc操作都有version的, 比如还是该把每次操作记录下来
【在 z*********8 的大作中提到】 : 这个我觉得不对, 这些doc操作都有version的, 比如还是该把每次操作记录下来
|
p*****2 发帖数: 21240 | |
c***d 发帖数: 26 | 9 socket.io.
还有我觉得需要提一下pub-sub.
【在 p*****2 的大作中提到】 : websocket就可以了
|
p*****2 发帖数: 21240 | 10
pub-sub你想怎么提?
【在 c***d 的大作中提到】 : socket.io. : 还有我觉得需要提一下pub-sub.
|