oho, sehr interessant. Auf die "Erweiterungen" bin ich gespannt ... Ich hab das gleiche auch in Arbeit, allerdings habe ich es bei perlScript belassen, um möglichst viel vom originalen Code übernehmen zu können.
<ANTWORT>
Na, ich will Dich nicht auf die Folter spannen, die "Erweiterungen" betreffen Größtenteils das, was hier im SelfAktuell auch schon implementiert wurde. (Vielleicht können wir unsere Arbeiten zu diesem Thema ja mal kombinieren, in Neu-Deutsch nennt man so was glaube ich "Synergie-Effekt")
Zusätzlich zum Orginal-Script wurde unter ASP implementiert:
-
Der "Schwanzabschneider", der eine unendliche Länge des Index verhindert und "alte" Postings gesondert in komprimierter Form archiviert.
-
Das Einbinden von Links und Grafiken im Posting Text in der Form von {link:http://www.xyz.de} bzw. {image:http://www.xyz.de/bild.jpg}
-
Die Möglichkeit "Flags" zu vergeben, um ungewünschte Auswüchse der Forenbeiträge einzudämmen. (Gruß an die Mannschaft von SelfAktuell, die Idee funktioniert wirklich hervorragend und in Folge ist das Forum hier wieder informativer und auch professioneller geworden)
-
Suchfunktionen in den Archiv-Dateien (noch in Arbeit, wird voraussichtlich mit einer ADO-Server-Gebundenen "Stichwort"-Datenbank realisiert, die beim Archivieren der "Alt-Postings" gefüllt wird.)
Der erste Ansatz für ein Forum war eine reine Datenbanklösung, aber in der Praxis (bei vielen Hits) ist das, zumindest in Form einer Desktopdatenbank, wie z.B. MS-Access, einfach zu langsam, da ja dann jede Abfrage (einschließlich Index) über den Parser die Serverseitigen Connection-Objekte und nicht zuletzt den ODBC-Treiber geht.
Dann kam der Gedanke "wie machen das denn die Anderen eigentlich ?" Hier in SelfAktuell fand ich den Hinweis auf Matt Wright's Script...
Ich wollte allerdings von Anfang an nicht versuchen das Script 1:1 in ASP zu übernehmen, sondern es lediglich als "Koch-Rezept" für ein Multi-threaded Forum verstehen. Deshalb ist eigentlich ein ganz "neues" Script entstanden, welches im Prinzip lediglich an die Datenstrukturen von Matt Wright's Script angelehnt ist.
</ANTWORT>
<FRAGE>
Was das Orginal-Sricpt vom Matt Wright betrifft (wie gesagt, ich habe es nur gelesen und nicht installiert bzw. getestet) beschäftigt mich die (alte Multitasking-) Frage:
Was passiert eigentlich, wenn zum exakt gleichen Zeitpunkt zwei Besucher "posten" ? Unter Linux und Perl laufen, meiner Information nach, die Scripts jeweils in eigenen Threads, das heißt, unabhängig und "unwissend" von einander und auch vom WWW-Server.
Das heißt es könnte theoretisch folgendes passieren: Thread 1 liest die Datei mit der aktuellen Nachrichtennummer, Thread 2 tut dies zehn Millisekunden später, Thread 1 schreibt die inkrementierte Nummer zurück und Thread 2 macht dasselbe zehn Millisekunden später.
Folgt daraus, daß dann in Folge zwei Nachrichten unter der gleichen Message-ID archiviert werden (wäre ja unpraktikabel, die zweite Nachricht würde die erste mit dem gleichen Dateinamen sofort überschreiben, ganz zu schweigen von den möglichen Effekten beim Updaten der Links in den Parent-Posting-Dateien, die ja bei Matt's Script dann anschließend erfolgen...)
Vielleicht ist das ja auch nur noch nicht passiert, wenn ich mir die zeitlichen Abstände der Postings in diesem Forum anschaue, so liegen doch in der Regel immerhin mindestens ein paar Sekunden dazwischen, so daß das Script, welches ja gleichzeitig die Message-ID inkrementiert, die Nachricht speichert, das Inhaltsverzeichnis aktualisiert und auch die vorhergehenden Nachrichten mit dem Link auf die aktuelle Nachricht versieht, in der Regel schon durch sein sollte, bevor das nächste Posting "submitted" wird.
</FRAGE>
<HINT>
Unter Active Server Pages hat mich dieses Problem nicht viel Mühe gekostet, das integrierte "Application"-Objekt bietet für solche Fälle die Methoden "Application.Lock" und "Application.Unlock" an, die einen gleichzeitigen Zugriff auf Application-Variablen verhindern, der "Zweite" kommt mit seinem Lock erst zum Zuge, wenn der "Erste" seinen Unlock durgeführt hat.
</HINT>
MfG Christoph Ruhnke