Hello Manu,
danke für Deine Antwort. Ich hatte mir auch schon überlegt, die Daten in einer Datei vorzuhalten, um die Datenbanklast zu verringern.
Die DB würde somit nur benutzt, wenn jemand etwas schreibt (zum Loggen/Ausfallsicherheit).
Was meinst Du genau mit "nicht exclusiv, sondern nur shared gesperrt werden"?
Exclusiv gesperrt werden muss die Datei nur zum Verändern, also "Auslesen - Verändern - Schreiben". Das geschieht genau dann, wenn eines der SchnatterInchen einen Beitrag zur Kommunikation sendet. Dann sollte der in die Datei eingetragen werden und bei dieser Gelgenheit ggf. auch der älteste herausgelöscht werden, wenn es denn genügend Absätze im Scope sind.
Zum Abfragen, ob bereits wieder ein Beitrag gekommen ist, reicht dann ein Shared Lock. Der Client muss also zwei Methoden für AJaX vorhalten und der Server muss darauf reagieren können mit seinen Methoden/Funktionen.
Wenn man stattdessen bei jeder einfachen Abfrage ein exclusives Lock verwendet, was durchaus ginge, wird der Fileserver damit doch erheblich belastet.
Die eigentliche Frage ist aber ganz generell, ob es mit PHP möglich ist, dass verschiedene Clients auf ein- und dasselbe Objekt per Referenz oder wie-auch-immer zugreifen können (im obigen Fall die Daten, die ein Soap-Service liefern würde und die ja im RAM liegen).
Du könntest Dich an den Shared-Memory-Funktionen von PHP versuchen.
http://de.php.net/manual/de/ref.sem.php
http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/de/
Ob das aber nun besonders geschickt ist, käme auf einen Versuch an.
Platten-Speicherplatz ist i.d.R. erheblich mehr vorhanden, als RAM. Die Zugriffe (Requests) werden schlussendlich doch meistens serialisiert abgewickelt, sodass daselbe RAM allen Prozessen nacheinander zur Verfügung steht. Wenn Du aber die Daten persistent im Speicher halten willst, dürfen sie ja nicht freigegeben werden bis zum nächsten Request.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg