我正在设计一个协作系统,其中多个用户可以编辑同一个文档,就像googledocs一样,我想“搜索建议”,但绝不是先进的。
我的问题是,我的设计会有效吗?我知道足够的php / ajax来设计这个,使用jQuery作为ajax部分。但我从未制作过这样的系统,因此设计可能存在很大的缺陷。
网页的可编辑部分是一个表格,可以在其中编辑某些单元格(与Google文档电子表格非常相似)。
理论上这将起作用,每当更改表格单元格时,更改都存储在历史记录中,并且每隔1000毫秒(在最后一篇文章成功返回之后)我将单元格更改发布到服务器
同时,另一个ajax函数轮询服务器(也是在最后一次调用返回成功后的每1000毫秒),并要求提供对所有单元格所做更改的列表。
这是谷歌如何做到这一点的简单方法吗?
答案 0 :(得分:1)
这是一个值得商榷的主题,大多数解决方案都依赖于需求和用例,而不是“正确”。其中一个更复杂的解决方案是使用Semaphore:
http://en.wikipedia.org/wiki/Semaphore_(programming)
铁路信号量标志: http://en.wikipedia.org/wiki/Railway_semaphore_signal
那就是说,在你的情况下,我怀疑应该使用“最后写的值”。只需让每个编辑在服务器上排队,然后应用到它的单元格。显然,有些情况下数据会被不恰当地覆盖,但这就是人类发挥作用的地方。
您可以选择检测两个用户何时关注并正在编辑同一个单元格 - 发生这种情况时,向每个用户发送通知,告知他们的更改可能与另一个用户发生冲突。最不积极的用户将退出并执行其他操作。显然,有更多的情况,例如批量编辑,但这又取决于您的要求。
答案 1 :(得分:0)
您可以通过发布更改列表并在一次点击中接收所有更改列表,将这两个查询减少为一个。您可以通过仅检查用户何时实际使用页面来优化它(例如,如果您在过去30秒内收到鼠标悬停事件)。而且你可能决定每秒都不需要点击服务器;可能会有10秒钟。毕竟,如果您的网络运行缓慢,完成一次通话可能需要超过1秒的时间。
之后,这是一个问题,您需要从服务器中获得什么样的可扩展性,只有您可以回答这个问题。您投票越多,您的Web服务器可以支持的用户就越少。
Google Docs(我认为)使用持续开放的推送连接来接收更新而不是轮询,但这种架构不应该被轻易接受。当然,他们有数千台服务器。