1unitedpower: Nachricht vom Server an Client

Beitrag lesen

Mich hätte nun interessiert, wer schon mit den PHP-WEbsocket-Servern Erfahrungen hat:

Nur wenig, aber hat mir auch nicht gefallen. Die Server-Infrastruktur, die man für WebSockets braucht, unterscheidet sich ziemlich stark von klassischen PHP-Anwendungen. Normalerweise wird PHP von einem HTTP-Server über CGI oder einer Variante aufgerufen. Der HTTP-Server, z.B. Apache, kümmert sich um den Netzwerk-Verkehr und weist jeder HTTP-Anfrage einen eigenen Prozess/Thread zu, der dann eine Seite generiert und die Kontrolle zurück an den Webserver gibt. Damit sind unter anderem die Speicherbereiche voneinander getrennt und um Daten zwischen mehreren Prozessen zu teilen, muss man immer irgendeinen Zusatzmechanismus (Datenbank, Shared Memory) bedienen. Bei WebSocket-Servern sieht das anders aus, da startet man einen langlebigen PHP-Prozess, der dann eigenständig den Netzwerk-Verkehr mit dem Browser regelt. Die Mediator-Rolle des Apache-Servers fällt dann weg. WebSockets erfordern daher andere Programmier-Muster. Du hast nun einen gemeinsam genutzten Speicherbereich, in dem du nun Daten verwalten musst, die von verschiedenen Verbindungen stammen können. Das erfordert neue Muster bei der Authentifizierung und Autorisierung. Und du hast nur einen Prozess, willst aber natürlich alle Clients fair bedienen können. Das gesamte Scheduling, was zuvor der Apache für dich geregelt hat, musst du nun selber übernehmen. Mit PHPs blocking IO und der ständigen Gefahr von Laufzeit-Fehlern ist das kein Zuckerschlecken. Es gibt natürlich Frameworks, die dir die Arbeit erleichtern, aber auch für die gilt, dass sie sich stark von klassischen Frameworks unterscheiden. Wie @dedlfix schon sagte, ein Großteil der Komplexität steckt bereits in der Problemstellung. Manche anderen Programmierumgebungen (ich denke an node.js) sind aber auch vordergründig für solche Anwendungsfälle geschaffen worden. So ein Wechsel ist natürlich auch nicht mit weniger Einarbeitungszeit verbunden und je nach Fortschritt des Projekts auch gar nicht mehr möglich. Falls aber doch, dann dürfte es weniger haarig werden als mit PHP. Die asynchrone/non-blocking IO ist jedenfalls ein wichtiger Erfolgsfaktor von node.