![]() |
Datei in Echtzeit "teilen"
Liiiebe DP,
bevor einer meckert, JA ich HABE gesucht und nix gefunden, was mich überrascht hat, denn ich dachte, dass mein Problem schonmal jedem über den Weg gelaufen ist - eventuell habe ich aber auch einfach nur mit falschen Suchbegriffen gesucht :gruebel: Das Problem ist folgendes: Ich habe Webspace, auf dem ich eine Datei hochlade. Mein Programm lädt sich die Datei herunter, liest sie ein, der Benutzer kann was ändern und seine Änderungen werden sofort wieder retour hochgeladen. Soweit so gut... Kommt nun aber ein zweiter Client hinzu, der eine Änderung vornimmt, während der andere gerade etwas anderes ändert, so würde die zweite Person nach der ersten die alte Datei hochladen mit lediglich seiner Änderung, sodass die Änderungen von Person 1 verworfen wären! Meine Idee: Prüfen wir doch einfach vorher, ob die Datei die wir haben noch aktuell ist... Aber was wenn nicht? In dem Fall bekommt Person 2 eine Meldung, dass die datei verändert wurde und er sich das doch bitte vorher erstmal anschauen soll, denn eine GLEICHZEITIGE Änderung desselben Wertes wäre mit einfachem Download, Upload fatal! Wollen wir diese Möglichkeit aber einfach erstmal ausschließen... Okay das war langatmig und sinnfrei, hier nochmal einfach :D Es geht eher allgemein darum, wie kann ich Informationen in Echtzeit in mehreren Clients synchron halten? Ich verstehe es im Moment einfach nicht! Schonmal vielen Dank für eure Zeit... |
Re: Datei in Echtzeit "teilen"
im Notfall kannst du auch einfach die Dateien sperren, sobald jemand daran arbeitet.
- Erster lädt eine Datei runter und diese Datei wird entsprechend auf dem Server makiert. - Zweiter bekommt eine Meldung, daß diese Datei grade in Bearbeitung ist. - Erster läd Datei hoch und sie wird wieder freigegeben - Zweiter kann jetzt laden - falls bei Erstem was passiert, wird auf dem Server nach einer Weile die Datei ebenfalls wieder freigegeben, so daß sie nicht ausversehn ewig blockert bleibt (das Programm des Wweiten könnte auch noch in regelmäßigen Abständen seinen Bearbeitungsstatus aktualisieren, so mitteilen, daß er noch lebe und die Sperrzeit somit verlängert wird) Ansonsten gab's hier vor 'ner Weile die Nachfrage nach so'ner Art "Live-Editor", wo Zwei/Mehrere über eine INetverbindung gleichzeitig an einer Datei arbeiten und beim jeweils Anderen die eigenen Änderungen sofort einfließen. Dafür bräuchten die Programme aber sändige Verbindung zum Server oder eine zumindestens eine gegenseitige Verbindung. |
Re: Datei in Echtzeit "teilen"
Das wäre zwar eine Möglichkeit, aber ich will es ja ermöglichen, dass 2 Leute oder mehr, gleichzeitig Veränderungen vornehmen können!
|
Re: Datei in Echtzeit "teilen"
Zitat:
Aber das Einfachere auch hier wäre, wenn man einfach Dateiteile sperrt, anstatt ganzer Dateien, so könnten die zumindestens an unterschiedlichen Teilen arbeiten und würden sich dennoch nicht in die Quere kommen :angel2: |
Re: Datei in Echtzeit "teilen"
Wie wärs damit:
Wenn A die Datei runterlädt, und B zwischenzeitlich was ändert und danach A seine Änderungen hochladen will passiert folgendes: A bekommt die Datei in einer Art Splitscreen-Modus, sodass er die beiden Verionen genau vergleichen kann :) |
Re: Datei in Echtzeit "teilen"
Die Idee finde ich sehr gut!
Aber richtig Echtzeit...ich meine ich kann die Datei auch nicht einmal pro Sekunde runterladen, dann ist das ja nur am rumlaggen, nich @jfheins Ja das hatte ich bisher so gehabt, nur ich fand das halt blöd, ich fände es am besten, wenn jede Änderung sofort dargestellt würde, nur weiß ich halt nicht wie ich das realisieren soll... |
Re: Datei in Echtzeit "teilen"
Hallo 64Jabor,
Mir fallen auf Anhieb zwei Wege ein wie ich das lösen würde: - Bevor Benutzer 1 die Datei läd, erstellst du eine "LOCK" Datei (Dokument1.doc wird angefordert, Dokument1.doc.LOCK wird erzeugt) - Benutzer 2 fordert die gleiche Datei an, und erhält bei der Prüfung ob eine Lock Datei für diese Datei existiert eine "Bitte warten" Meldung oder so. Damit kannst du sichergehen dass nur ein User die Datei bearbeiten kann. Der zweite Weg wäre bestimmt besser für dein Anliegen, aber auch deutlich umfangreicher. Und ich bin mir nicht sicher ob du Shell-Zugriff auf deinen Webserver hast: - Socket-Server (Unter Linux: PHP, RUBY, Freepascal) der die Anmeldung der User und den Dateitransfer steuert - zu diesem verbindest du dich mit einem Socket-Client den du dir mit Delphi baust - Der Ablauf könnte dann ähnlich wie beim Versionierungssystem "Subversion" (SVN) laufen: - CHECKOUT Datei (Datei laden) - Bearbeitung durch den Benutzer - UPDATE eventuelle Änderungen die zwischenzeitlich gemacht wurden laden - Lokale Datei mit der aktuellen Remote Datei vergleichen und die Änderungen manuell durch den Benutzer einpflegen lassen - oder automatisiert mit einem Merge-Tool (z.B. TortoiseMerge) "zusammenführen" (gibt bestimmt Commandline Tools dafür) - COMMIT Die lokale (zusammengeführte) Datei zurückschicken Bestimmt ist auch eine Mixtur aus beidem möglich. EDIT: Ach, sehe gerade dass ein paar Andere hier ähnliches vorschlagen :-) |
Re: Datei in Echtzeit "teilen"
Ich stell mir das lustig vor, wenn nicht nur 2 Leute, sondern 20 an ein und derselben Datei rumfrickeln. Wozu soll das denn führen? Auch wenn das irgendwie nett wäre, das man direkt die Änderungen der Anderen mitverfolgen könnte, praktikabel ist das sicherlich nicht, eher eine visuelle Spielerei. Ich könnte mir auch vorstellen, das es eine Herausforderung wäre, das optimal hinzubekommen.
Du willst doch eine praktikable Lösung für das Problem "Gleichzeitiges Ändern einer Datei". Die ganze Datei zu sperren wäre eine Nöglichkeit, aber das ist vielleicht ein wenig zu viel des Guten. Mach dir mal Gedanken über die Struktur und die kleinste sinnvolle Einheit, die exklusiv zu bearbeiten wäre. Nehmen wir ein Textdokument, irgendeine Abhandlung. Der besteht aus Kapiteln, Abschnitten, Absätzen, Sätzen, Wörtern und Buchstaben. Welches Element ist hier das kleineste sinnvoll exklusiv zu bearbeitende? Ich würde plädieren, das es der 'Abschnitt' ist, auf jeden fall *nicht* so wie Du es willst, der Buchstabe. Wenn wir also unsere Datei in 'Abschnitte' unterteilen können, können wir die einzeln sperren und jede Änderung den anderen zugänglich machen. Ob das live geschehen muss, sei mal dahin gestellt. |
Re: Datei in Echtzeit "teilen"
Zitat:
Gruss Reinhard |
Re: Datei in Echtzeit "teilen"
Das geht schon, wenn Du schon mal an einem Remote-Desktop gearbeitet hast, bei dem der User auch noch rum tippt, weist Du wie viel Spass das bringt.
alzaimar hat es ja schon gesagt, es macht keinen Sinn, weshalb bekannte Lösungen logisch kleinste Bereiche sperren. |
Re: Datei in Echtzeit "teilen"
[quote="Reinhard Kern"]
Zitat:
|
Re: Datei in Echtzeit "teilen"
Je nachdem, für was das sein soll, klingt hier auch der Einsatz von SVN ganz naheliegend.
|
Re: Datei in Echtzeit "teilen"
[rant]SVN ist das Böse ;).[/rant]
Ansonsten zum Thema: Das was Du Dir da vorgenommen hast ist alles andere als trivial. Du magst mehr oder weniger quasi in Echtzeit das Bearbeiten des selben Dokuments durch mehrere Leute ermöglichen. Je nachdem was für eine Art Dokument das ist, sollte man schauen ob sich die Sache nicht evtl. anders lösen lässt. Wenn Du Dich partou nicht von der Idee trennen magst, kannst Du ja mal schauen ![]() |
Re: Datei in Echtzeit "teilen"
Hi,
zuerst einaml habe mir nicht alles durchgelesen, falls doppel Posting Sorry, Warum nicht in jeder Tabelle ein Feld "Änderung" Typ TimeStamp anlegen und das dann einfach vergleichen ;-) Uwe |
Re: Datei in Echtzeit "teilen"
Das artet aus, ich sehs schon :D
ALso was ich will, ist zB. ein Blatt Papier auf dem jeder malen kann, als Beispiel. Nun soll das halt möglichst in Echtzeit mitzuverfolgen sein. Das Problem ist denke ich, dass ich Textdateien verwendet habe, die ja jedesmal als ganzes heruntergeladne werden (müssen?) Würde ich zB. nur die Position eines Punktes durchgeben - und eine Linie besteht ja nunmal aus vielen Punkten, wäre dies wahrscheinlich wesentlich schneller. Das ließe sich aber kaum mit Webspace realisieren, sondern wohl eher mit einer Serverversion meines Programmes, das als Verteiler dient, und dafür müsste ich mein Konzept bisher über den Haufen werfen ^^ |
Re: Datei in Echtzeit "teilen"
Der Server (bzw. auch ein "billiges" PHP-Script) muß ja nur die IPs der Rechner kennen und dann unterhalten die Programme sich direkt und schicken sich nur noch die Änderungen untereinander hin und her.
|
Re: Datei in Echtzeit "teilen"
Anscheinend verstehe ich Dein Problem nicht, oder Du hast mein Vorschlag ignoriert!!!!
Wäre die letzte Änderung jedes Datensatzes per TimeStamp protokolliert,(Das machte TimeStamp automatisch) ist es doch einfach beim hochladen nur die Datensätze zu ersetzen, die ein neueres Datum bzw. Uhrzeit haben. Uwe |
Re: Datei in Echtzeit "teilen"
Hallo, nutzt Du keine Netzwerkfaehige Datenbank?..Damit waer es kein Problem, da Du Datensaetze einzeln sperren kanns wenn sie in Bearbeitung sind.
|
Re: Datei in Echtzeit "teilen"
Nein ich benutze keine Datenbank, ich habe Delphi 7 Personal, denke das kann soetwas gar nicht =/
Ich muss zugeben deinen Vorschlag mit dem TimeStamp hatte ich schlichtweg überlesen xD Also ich sollte einen TimeStamp der letzen Änderung in meiner Datei für jeden Datensatz mitspeichern und dann nur die neueren Datensätze speichern, aber wie ist da gewährleistet, dass die Änderung bei anderen angezeigt wird? Ich meine wenn ich die Zahl 30 habe und ich sehe meine Datei gleichzeitig an mit jemand anderen, ich verringe auf 25, er dreht sie hoch auf 35, dann sieht er bei seiner Änderung zu keiner Zeit, dass ich die Zahl gerade runterschraube, oder? Vielleicht muss es aber auch gar nicht so kompliziert sein würde ich davon ausgehen, dass nie der gleiche Datensatz bearbeitet würde. Dann wäre die Sache mit einem TimeStamp wiederum leicht zu realsisieren... |
Re: Datei in Echtzeit "teilen"
Ich mag mich ja nicht aufdrängen (obwohl: doch eigentlich schon ;)) aber genau Dein Problem ist wie gesagt in der Google Wave Protokoll Spezifikation erläutert:
![]() Ebenfalls interessant zu Deinem Problem ist der Wikipedia Eintrag zum entsprechenden Themengebiet (Operational Transformation): ![]() |
Re: Datei in Echtzeit "teilen"
@Fridolin
Ja ich hatte mir den Link bereits angesehen, aber mein Schulenglisch weißt da doch die ein oder andere Lücke auf =/ Ich werde mal googlen ob es dazu was deutsches gibt :D vielen dank, so weiß ich jetzt wonach ich suchen muss =) |
Re: Datei in Echtzeit "teilen"
Zitat:
Wenn aber Nachrichten durch Netzwerkstörungen verloren gehen, sind die Dokumente nicht mehr überall auf dem gleichen Stand. Das könnte man beheben, indem die Dokumente über das gleiche System mehrfach übermittelt werden, also ein eingebautes Fehlerkorrekturverfahren. Robuster wäre ein Publish/Subscribe System, bei dem ein Server die Nachrichten zentral empfängt, und dann an alle angeschlossenen Clients verteilt. Der Server wäre dann so etwas wie ein Rundfunksender, und beliebig viele Clients könnten einen bestimmten Kanal wählen und von dort Nachrichten empfangen. Sie könnten aber auch Nachrichten an den Kanal senden und würden damit alle aktuellen Zuhörer erreichen. Bekannte Vertreter dieser Art von Systemen sind z.B. Amazon Simple Queue Service oder ![]() |
Re: Datei in Echtzeit "teilen"
@mjustin
Das Problem wäre hier für mich der Server =/ Ich möchte nicht jedesmal an alle meine Router-IP rausgeben, damit das Programm läuft und ich will sie ja auch nicht zb auf dem Webspace hinterlegen, der für jeden einsehbar wäre... Am liebsten wäre mir da die Methode, dass die Clienten sich eintragen und dann untereinandern kommunizieren |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz