多人同时编辑一个远程文本文件,如何协调? 300分(300分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
多人同时编辑一个远程的文本文件,每人只编辑自己相关的部分,
在该文本文件中有标记指示每个人的编辑区域.

由于文件在远程机器上,所以不能直接打开文件,只能下载下来,然后
编辑自己相关部分文本,然后再通过ftp上传回去.

现在的问题是: 当一个用户编辑完上传的时候,可能该文件的其他部分
已经被别的用户修改,那么他上传的文件对应部分相对来说就已经是旧
的内容了,这样上传势必会覆盖其他人编辑的最新文本.

请问怎样解决这个问题? 请提供最好的方案.
 
我觉得你可以用delphi带的teamsource
它实际上就是一个基于网络的版本控制系统
大概的原理就是如果你想编辑某个文件,你
就需要把它从控制系统check out,这时你可以
给它加锁,别人就无法修改,等你改完之后
你就可以check in回控制系统,这时别人才可以改它
另外除了上面说的好象teamsource也支持同时改,可
以把不同的变动记录下来,进行比较。详细的我也没太搞清楚
你研究研究吧,或者用pvcs,visual sourcesafe可能也可以吧


 
有教程吗?
 
如果你不是为了开发软件实现这个事情,你就不能使用TEAMSOURCE,
建议你使用数据库保存的文件,使用MIDAS控件导入导出你的数据,
MIDAS能够实现你的需求。
 
有一篇关于teamsource的外文文章,挺他妈长的
看地贼累,我给你发到cakk2000@163.net里

你研究明白了,别忘了告诉我
 
>> 如果你不是为了开发软件实现这个事情,你就不能使用TEAMSOURCE,
为什么不能用,要交钱?
 
如果锁定就不是CAKK的意思了吧?
不如就将文本分成几个文件,每个负责一个,凭用户名和口令得到自己的块。
在其它用户请求时则返回全部。
 
houdog: 外文的???? :-(

3h: 能说的详细点吗? 我要求远程机器上的那个文件不论什么时候掉出来,
每个部分都是最新的内容.

shareman: 我现在也是在本地用的数据库来保存最新的文件,每个人每次
更改自己的部分后,不仅要上传,而且还要把数据库里面的文本的相应
部分也更新. 但是这样也牵涉到"多人同时修改一个纪录的情况",怎样
保证我得到的数据是最新的呢?
 
cAkk,我觉得如果用 3h 的方法应该能符合你的要求。
 
关键是无法知道什么时候"其他用户请求"...因为在本地只负责编辑上传,
至于该文件什么时候被查阅和本地系统几乎没有任何关系.

说白了把,其实就是多人编辑网页.因为网页的各个部分需要实时消息,需要
在本地通过一套编辑系统来生成.
 
为什么不每人编辑一个文件?
某人再把他拼接起来
 
wrench: 问题是"什么时候拼接"才能保证是最新的呢?
 
干脆就每人传上去,给用户的就是对应的链接,不就都是最新的吗?
 
不行. 页面上必须是内容块,不能是连接.
 
cAkk: 瞎说两句,要是说的不对,别在意。

实际上,我觉得你需要同时编制一个SERVER程序,这个SERVER程序可以输出一个
HTML的壳子,当CLIENT端用户A需要编辑他的文件时,SERVER端在那HTML的用户指
定位置(或SERVER确定的位置上,插入一个自定义的TAG,比如<CustomerData_A>
</customerData_A>,通理,当用户B在CheckIN后,也插入相应的TAG。用户POST
的文本不是单纯的文件,而是做为SERVER的输入,有SERVER程序合成整个最终文本。

在A编辑结束后,就算B、C在编辑中,未上传时,SERVERR输出的文本将包含了A的输出
部分,和B、C的旧内容。当B输出后,SERVER输出文本将更新B的部分。

需要注意的是,在SERVER有一个固定的排版格式(即:知道A、B、C的文本要插入在
什么地方),就象生成一个模板一样。

我前一段日子尝试用TWEBROWSER做一个报表输出程序,就用类似的办法。

 
xml或者html的标记可以单独锁定
 
to all: 综合大家的观点,基本原理都是:
由一个单独的程序(server)来专门负责拼接文本文件,每个编辑员只编写
自己负责的部分,然后把最新内容发送给server,由他进行拼接.

因为拼接部分是由同一个程序来完成的,所以能够做到有效的协调,并保证
内容的实时性.

我现在之所以要做成每个编辑员自己生成完整的文件(即:自己拼接),是因为我做了
一个独立的软件,类似于getRight,不过是用来上载的(PutRight??:-)),这样每个
编辑员生成文件之后,给PutRight发送消息,告诉他需要上载的本地文件,远程目录等,
其他就不管了,真正的上载任务全部交给PuRight来完成的. 这样做的好处是编辑员
不用关心网络状况,只管编辑就是了,这样编辑速度会比较块.

好,现在请大家继续发挥,看有没有更好的思路.
(主要是如果照前面的意见改程序,改动会很大)

iie: 你说的是什么意思?
 
我记得以前有过一个问题.大概是"如果多人同时修改数据库,怎样保证保存的是最新的数据"...但是现在找不到了,谁知道?

我对数据库不熟.
 
首先不可能是将每人最新的全文上载覆盖旧文。必须是独立的文件或字块。
而最新问题。如果这样(test,大富翁未必支持)
<!--#include virtual="http://www.gislab.ecnu.edu.cn/delphibbs/main.htm" -->
也许可以。
 
soul: 你到是提醒了我,我试一试include.
 
后退
顶部