mermshaus
Senior HTML'ler
skizZ schrieb:Wegen der geplanten Chattechniken oder der hohen Zugriffszahlen?
Ab wann würde deiner Meinung nach PHP keinen Sinn machen? Ich arbeite im Moment selbst an einem kleinen Projekt und rechne mit etwa 100 Benutzern. Dies ist natürlich nicht viel, diese werden allerdings viel damit arbeiten. Sollte ich hierbei auch auf etwas anderes setzen?
Das „Kerngebiet“ von PHP ist es, HTTP-Anfragen zu beantworten, also Webseiten (HTML-Code) zu generieren. Dabei läuft ein Skript selten länger als ein paar Sekunden. Beim nächsten Request wird es völlig neu gestartet.
Für Anwendungen mit längerer Laufzeit (Stunden, Tage), also Dienste, eignet sich PHP vor allem deshalb schlecht, weil es dafür nicht konzipiert wurde. Es unterstützt beispielsweise kein Threading. Zudem wird oft behauptet, PHP würde mit zunehmender Ausführungszeit Speicher leaken (Speicherleck). Ob da was dran ist, weiß ich nicht. Das sind jedenfalls beides Punkte, die bei Laufzeiten von Sekunden nebensächlich sind.
Andererseits können Dienste in PHP programmiert werden. Beispielsweise frameone schildert hier seine Erfahrungen:
- Keystroke - PHP Forum: phpforum.de
(Anmerkung dazu: Was ich über Sockets und Java-Applets schreibe, ist mittlerweile überholt. Im Rahmen von HTML5 haben viele Browser bereits eine native Unterstützung von Sockets (WebSocket) eingebaut. Falls das nicht der Fall ist, nutzt man wohl als Fallback eine kleine Flash-Komponente.)
@skizZ: Ich habe zu wenig Erfahrung mit PHP-Programmen als Diensten, um dir eine Empfehlung zu geben. Aber die Tendenz dürfte klar sein: PHP kann sowas generell irgendwie auch, andere Sprachen können es besser.
Warum ein Dienst statt zahlreichen Einzelaufrufen eines Skripts?
Weil wir Sockets wollen.
Der Unterschied zwischen Sockets und normalen HTTP-Requests ist gewaltig. Nehmen wir beispielsweise ein Online-Brettspiel, in dem im Browser zwei Spieler gegeneinander antreten können. Das Spiel soll mit HTML/JS und einer serverseitigen Komponente zur Datenhaltung programmiert sein (also kein Flash, kein Java-Applet, …). Das Problem ist, den jeweiligen Spielern mitzuteilen, dass der jeweils andere Spieler einen Zug ausgeführt hat. Ohne Sockets geht das nur mit Ajax, also durch wiederholte HTTP-Anfragen an den Server: „Ist was Neues für mich da?“ Die Antwort darauf dürfte meist „Nein.“ lauten, und der Request verbraucht nur unnötig Bandbreite. Außerdem besteht eine gewisse Wartezeit, da praktischerweise nur alle meinetwegen 10 Sekunden ein Request abgesetzt wird. Das heißt, im Schnitt bekommt ein Spieler erst nach 5 Sekunden (+ Requestdauer, + Initialisierungs-/Ausführungszeit des serverseitigen Skripts) mit, dass der Gegner gezogen hat.
Bei einer Socketverbindung kann der Server selbsttätig Daten an die Clients (also die Spieler) senden. Da fallen die „Hast du was für mich?“-Anfragen und der gesamte HTTP-Overhead weg (das ist bei sowas ein signifikanter Anteil, ich sage mal 95 % oder mehr). Außerdem geschieht die Aktualisierung praktisch in Echtzeit. Prinzipiell hast du dann sowas wie einen „Ping“ wie bei einem Online-Spiel oder so.
(Recyclet aus dem Thread http://www.html.de/html-und-xhtml/40690-html5-websockets-2.html#post294413.)
Bei einer Socketverbindung kann der Server selbsttätig Daten an die Clients (also die Spieler) senden. Da fallen die „Hast du was für mich?“-Anfragen und der gesamte HTTP-Overhead weg (das ist bei sowas ein signifikanter Anteil, ich sage mal 95 % oder mehr). Außerdem geschieht die Aktualisierung praktisch in Echtzeit. Prinzipiell hast du dann sowas wie einen „Ping“ wie bei einem Online-Spiel oder so.
(Recyclet aus dem Thread http://www.html.de/html-und-xhtml/40690-html5-websockets-2.html#post294413.)

(xkcd)
Was bei simpler Textübertragung noch per HTTP zu stemmen ist, wird spätestens bei Bildübertragung einfach unsinnig bis unmöglich. Da möchte man eine Verbindung, die nicht zustandslos und die vor allem beidseitig ist (Socket (Software)).