Ich arbeite an etwas ähnlich einem Pastebin (ja, es ist dass generic), aber so dass für mehrere Benutzer bearbeiten. Das offensichtliche Problem besteht darin, dass mehrere Benutzer versuchen, dieselbe Datei zu bearbeiten. Ich denke an das Sperren der Datei, wenn ein Benutzer daran arbeitet (es ist nicht die beste Lösung, aber ich brauche nichts zu komplexes), aber um den Benutzer zu verhindern/warnen, würde ich offensichtlich eine benötigen System zur Überwachung der Editiersitzungen jedes Benutzers. Ich arbeite mit Datenbank und Ajax und denke dabei an zwei Lösungen.Überwachung von Benutzersitzungen verhindern Konflikt bearbeiten
Die erste wäre, die Bearbeitungsseite den Server in einem beliebigen Intervall pingen, sagen wir eine Minute, und es würde den Bearbeitungssitzung Eintrag in der Datenbank aktualisieren. Dann, wenn das nächste Mal eine Skriptanfrage bearbeitet wird, sucht es nach dem letzten Ping, und wenn das letzte eine andere willkürliche Zeit war, sagen wir fünf Minuten, dann nehmen wir an, dass der vorherige Benutzer aufgehört hat und die Datei erneut bearbeitet werden kann. Natürlich besteht das Problem bei dieser Methode darin, dass die Annahme, dass der vorherige Benutzer aufgehört hat, einfach eine Annahme ist. Er könnte flockige Wi-Fi-Verbindung haben und fiel einfach für zehn Minuten aus, die ganze Zeit mit dem Fenster noch offen.
Natürlich mit dieses Problem zu behandeln, müssten wir den Server auf neue Anfrage von zuvor geschlossenen Sitzungen mit einem Fehler reagieren müssen, die Clientseite sagen, um den Benutzer darauf hinweisen, dass seine Sitzung beendet wurde und dann behandeln Sie es, indem Sie es zum Beispiel als eine andere Datei auf dem Server speichern und den Benutzer auffordern, es manuell zusammenzuführen, usw. Es ist selbstverständlich, dass dies für den Endbenutzer ziemlich schrecklich ist.
So bin ich gekommen, um an eine andere Lösung zu denken. Es kann auch möglich sein, ein Ereignis unload
auszulösen, wenn die Benutzersitzung beendet wird, aber ich kann nicht sicher sein, ob dies zuverlässig funktioniert.
Hat jemand eine andere, elegantere Lösung für dieses Problem?
Es ist eine großartige Antwort, aber es ist wirklich nicht das, wonach ich suche: der kollaborative Bearbeitungsteil ist wirklich unbedeutend für die Freigabe, sorry wenn ich das nicht klar mache. Die Einführung dieser Lösung würde die Dinge sogar * komplexer * machen - zu komplex für eine einfache Text/Code-Sharing-App. Die Anzahl der Randfälle, die ich berücksichtigen müsste, wäre ... angesichts der Komplexität der Benutzerinteraktionen hier völlig unmöglich. Trotzdem, großartige Antwort, und gab mir etwas, worüber ich nachdenken konnte, während ich auf die nächste Antwort wartete ... –