Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datei in Echtzeit "teilen" (https://www.delphipraxis.net/135995-datei-echtzeit-teilen.html)

64Jabor 21. Jun 2009 19:32


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...

himitsu 21. Jun 2009 19:42

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.

64Jabor 21. Jun 2009 19:43

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!

himitsu 21. Jun 2009 19:44

Re: Datei in Echtzeit "teilen"
 
Zitat:

Zitat von 64Jabor
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!

siehe meinen Nachtrag da oben : :lol:


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:

jfheins 21. Jun 2009 19:48

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 :)

64Jabor 21. Jun 2009 19:52

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...

Zerolith 21. Jun 2009 20:04

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 :-)

alzaimar 21. Jun 2009 20:11

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.

Reinhard Kern 21. Jun 2009 21:07

Re: Datei in Echtzeit "teilen"
 
Zitat:

Zitat von 64Jabor
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!

Das ist schon klar, ist ja auch eine lohnende Aufgabe, denn damit wirst du schlagartig weltberühmt. Die vielen tausend Entwickler von Datenbanken wie DB2, Oracle, MySQL usw. haben das Problem nämlich bisher nicht lösen können. Die arbeiten meistens, für dich unvorstellbar primitiv, mit Satzsperren, m.a.W. es können viele an einer Kundendatei arbeiten, aber nie 2 am gleichen Kunden.

Gruss Reinhard

Satty67 21. Jun 2009 21:18

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz