j4nk3y: socket.io in kombination mit AJAX und PHP

Guten Morgen zusammen,

Ich schaue mir gerade an welche Möglichkeiten socket.io / node.js bietet. Da meinem Projekt bisher nur AJAX und serverseitig PHP nutzt, würde ich gerne wissen, ob dieses "guter Stil" ist. Also ob man eine Kombination aus beidem in der Form umsetzt oder ob das der falsche Weg ist?

Weiterhin frage ich mich ob man den AJAX Request auch auf dem Node Server ausführen darf. Das aber eher am Rande überlegt.

Gruß Jo

  1. Tach!

    Ich schaue mir gerade an welche Möglichkeiten socket.io / node.js bietet. Da meinem Projekt bisher nur AJAX und serverseitig PHP nutzt, würde ich gerne wissen, ob dieses "guter Stil" ist. Also ob man eine Kombination aus beidem in der Form umsetzt oder ob das der falsche Weg ist?

    Fakt ist, dass du für Websocket auf dem Server einen eigenen Dienst laufen haben musst. So simpel wie ein PHP-Script in den Apachen werfen ist es nicht. Gegebenenfalls muss man da auch noch einen Reverse Proxy einrichten, wenn man die Clients mit ihren Websocket-Verbindungen nicht auf einen anderen Port als 80 schicken will. Wenn du also schon daran scheiterst, einen Dienst aufsetzen zu dürfen, kannst du an der Stelle aufhören und dir andere Wege suchen, zum Beispiel Ajax-Polling.

    Nun zum Projekt unter dem Link. Der schickt vom Client aus zwei Nachrichten. Eine an den socket.io, die an alle anderen angeschlossenen Clients verteilt wird, und noch eine zweite über Ajax an PHP, wo die Nachricht in die Datenhaltung eingefügt wird. Das ist nicht gerade das Gelbe vom Ei.

    Man kann ja bestimmte Teilaufgaben auf bestimmte Systeme verteilen. Nur hat man dann unter Umständen grundlegenden Code doppelt, wie Datenbankzugriffe, oder man muss wie im Beispiel zwei Systeme mit dem Verarbeiten derselben Daten beauftragen. Ob das guter Stil ist, wage ich zu bezweifeln. Unpraktisch scheint mir das auf jeden Fall.

    Weiterhin frage ich mich ob man den AJAX Request auch auf dem Node Server ausführen darf. Das aber eher am Rande überlegt.

    Von wo aus du den Request abschickst, spielt grundsätzlich keine Rolle.

    dedlfix.

    1. Moin,

      Nun zum Projekt unter dem Link. Der schickt vom Client aus zwei Nachrichten. Eine an den socket.io, die an alle anderen angeschlossenen Clients verteilt wird, und noch eine zweite über Ajax an PHP, wo die Nachricht in die Datenhaltung eingefügt wird. Das ist nicht gerade das Gelbe vom Ei.

      Ja das denke ich auch, da kann auch auf dem Node Server ein module für mySQL benutzt werden. Woran ich nur dachte ist folgendes: Alle Daten aus der Datenbank werden in irgendeiner Form verarbeitet. Sprich ich könnte alles weiterhin mit PHP verarbeiten und über den Socket an den/die betreffenden Client(s) zurück schicken.
      Wenn es zum Beispiel um einen Login geht benötigt man für den Websocket einige module wie bcrypt zum Passwort hashen etc. wohingegen PHP schon fertige Methoden liefert.

      Was dann aber zu einer weiteren Überlegung führt: wenn schon Node.js auf dem Server verwendet wird, warum dann nicht gleich alles in JavaScript verarbeiten, dann spart man sich auch das konvertieren der vom Server kommenden Daten von PHP zu JSON mittels json_encode(). Und Javascript soll auch schneller sein als PHP. Kann dazu vielleicht jemand etwas sagen?

      Man kann ja bestimmte Teilaufgaben auf bestimmte Systeme verteilen. Nur hat man dann unter Umständen grundlegenden Code doppelt, wie Datenbankzugriffe, oder man muss wie im Beispiel zwei Systeme mit dem Verarbeiten derselben Daten beauftragen. Ob das guter Stil ist, wage ich zu bezweifeln. Unpraktisch scheint mir das auf jeden Fall.

      Denke auch, das das eher unnütz ist.

      Weiterhin frage ich mich ob man den AJAX Request auch auf dem Node Server ausführen darf. Das aber eher am Rande überlegt.

      Von wo aus du den Request abschickst, spielt grundsätzlich keine Rolle.

      Gut, Danke für deine Einschätzung.

      Gruß
      Jo

      1. Lieber j4nk3y,

        Und Javascript soll auch schneller sein als PHP.

        das ist eine nicht überprüfbare Behauptung. Da PHP auf dem Server läuft, müsste man ein passendes Script unter PHP7(!) benchmarken, was wohl sehr stark zu einem bestimmten Mittelwert tendieren dürfte, da es auf genau einer Maschine läuft, JavaScript aber im Browser (welchem?) auf irgendeiner Client-Hardware (welcher?), bei der man auch wieder Benchmarks messen müsste.

        Der von Dir verlinkte stackoverflow-Thread ist von 2012, da dürfte PHP7 noch nicht verfügbar gewesen und damit die Aussage noch weniger fundiert sein.

        Liebe Grüße,

        Felix Riesterer.

        1. Lieber Felix,

          das ist eine nicht überprüfbare Behauptung.

          Ich behaupte einfach mal dreist das, deine Behauptung falsch ist.

          Da PHP auf dem Server läuft, müsste man ein passendes Script unter PHP7(!) benchmarken, was wohl sehr stark zu einem bestimmten Mittelwert tendieren dürfte, da es auf genau einer Maschine läuft, JavaScript aber im Browser (welchem?) auf irgendeiner Client-Hardware (welcher?), bei der man auch wieder Benchmarks messen müsste.

          Das ist leider nur teilweise richtig. Ja, Javascript läuft im Browser. Jedoch bietet node.js die Möglichkeit JavaScript auf dem Server laufen zulassen, bzw. bietet einen Server der mit Javascript läuft.

          Der von Dir verlinkte stackoverflow-Thread ist von 2012, da dürfte PHP7 noch nicht verfügbar gewesen und damit die Aussage noch weniger fundiert sein.

          Ja die sind alle etwas älter, da node.js auch schon etwas länger verfügbar ist. Wenn meine Klausuren vorbei sind, versuche ich einmal einen halbwegs aussagekräftigen Vergleich auf meinem Raspi zu erzeugen.

          Liebe Grüße
          Jo

      2. Hey,

        Und Javascript soll auch schneller sein als PHP. Kann dazu vielleicht jemand etwas sagen?

        Habe noch diesen Artikel bezüglich der Performance gefunden. Also wird es wohl auf eine kombination aus AJAX/PHP und socket.io/node.js hinauslaufen.

        Gruß
        Jo