java - 分布式文本编辑器 : multiple users editing a text file concurrently

标签 java io distributed synchronized

<分区>

我正在从事一个分布式系统项目。我需要创建一个程序,允许多个用户同时编辑同一个文本文件。我一直在网上寻找一个相对简单的解决方案,但我还没有找到。我读过 BlockingQueue 但这对我来说没有多大意义。我已经和我的助教谈过了,他建议每个客户都有一份文本文件的副本,他们将对其进行编辑。然后这些子文件将合并到主副本中。但是,问题是我无法在编辑文本文件时更新这些子文件。

最佳答案

据我了解,您需要一个在线文本编辑器,您可以使用它同时修改文件,并且更新应尽可能实时进行。

这是我会做的:

  1. 如果用户打开文件,他会收到该文件的副本,并且该用户会被添加到已打开该文件的用户列表中。
  2. 用户进行更改后,等待 X 秒以累积更多更改,然后将它们发送到服务器。
  3. 服务器一个接一个地处理文件的更改请求(不同的文件当然可以并行完成,也可以通过将文件分成 block 来更智能地完成,这些 block 也可以独立并行处理,至少在服务器端[这只是部分正确,如果更改 A 和更改 B 中受影响的 block 集的交集为空,则可以并行处理两个更改])
  4. 更改请求要么被接受,所有更改都广播给所有打开文件的用户,要么更改被拒绝。这可能非常复杂。最简单的方法是跟踪版本号并拒绝所有来自旧版本的更改。 (如果每个 block 都有一个版本号,并且 block 的大小很小,那么只有在两个或更多人同时在文档中几乎相同的位置工作时,您才会遇到拒绝。但这将是相当一些工作,考虑到如果它们变得太大或太小,您将不得不拆分/合并/删除/插入 block 。)

关于java - 分布式文本编辑器 : multiple users editing a text file concurrently,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907882/

相关文章:

Python I/O错误: How do I fix this program for file paths with whitespace?

python - 避免在 Dask 中重新计算相同的值?

theory - 超图可以表示非确定性图灵机吗?

java - 如何取消异步触发的线程并返回 Future?

java - HashMap 映射值略有偏差

java - Spring 数据存储库 - 检索所有记录的参数是什么?

java - 使用 iMap 的 Hazelcast 分布式锁

java - Android 应用程序通过不可靠的网络处理写入请求

java - 类 FileReader 中的构造函数 FileReader 不能应用于给定类型;

c++ - 我怎样才能在同一行得到我程序的所有总和?