Kommunikation zwischen PHP und C++



  • Guten Abend werte Freunde der abstrakten Künste.

    Wie realisiere ich aus eurer Erfahrung (von mir aus auch Meinung) heraus am besten die Kommunikation zwischen einem C++-Server und einem PHP-Client?
    Die Idee ist es, dass der Client (also eine Website) an den Server Anfragen sendet, die dann durch den Server (hauptsächlich Zugriff auf Datenbanken, ggf. auch Rechnungen oder sonstiges durchführen) ausgewertet werden und die Antworten dann wieder an den Client zurückgehen.
    Warum ich nicht einfach via PHP auf die Datenbanken zugreife, sollte an sich keine Rolle spielen.

    Zwei Varianten habe ich im Kopf herumschwirren. Die Erste ist es, per Sockets die Daten auszutauschen (recht einfach denke ich) und die Zweite wäre per PHP Extension einen C++ Wrapper zu schreiben um so auf Libraries zugreifen zu können (recht aufwendig/komplex).

    Bei der ersten Methode sehe ich das Problem, dass bei mehreren Nutzern (ein paar Dutzend) die Synchronisierung recht flott schief gehen könnte (Nutzer A ändert Daten, während Nutzer B genau diesen Datensatz löscht, es müssen aber beide an sich darauf zugreifen können - conflicting rights). Die zweite Methode wirkt allerdings für mich so abstrakt, dass ich nicht unbedingt weiß, ob sich die Umsetzung in der Form zeitlich im Vergleich lohnt (einen Wrapper für Sockets habe ich bereits entwickelt, ich müsste beim Zweiten also bei nahezu Null anfangen).

    Gibt es vielleicht eine noch ganz andere Methode (außer schreien, weinen, aufgeben, jemanden dafür bezahlen, und was weiß ich nicht noch alles) um dieses Problem (Kommunikation zwischen PHP und C++ - falls es jemand vergessen hat) zu lösen?

    Und falls noch Fragen offen sind, wieso, weshalb oder warum irgendwas wie, wo und wann sein soll, beantworte ich die natürlich (mir soll ja geholfen werden).

    Vielen Dankeschön schonmal und meine höchste Ehrerbietung für jeden ernstgemeinten Beitrag.



  • Fake oder Echt schrieb:

    per Sockets die Daten auszutauschen (recht einfach denke ich)

    Nicht über Sockets. Nimm irgendeinen Standard wie SOAP oder REST. Als Datenformat kann man Json oder XML verwenden.



  • gSOAP in Verbindung mit JSON sehen nett aus, dachte bisher beim Dateiformat an CSV und eben an Sockets.
    Hast du schlechte Erfahrungen mit Sockets und PHP+C/C++ gemacht (Inkonsistens, Implementierung, o.ä.)?



  • Ich hab fast gar keine Erfahrungen mit Sockets gemacht 😉 Ich bin grundsätzlich dagegen, eigene Frickellösungen zu basteln, damit gibt es langfristig nur Probleme. Warum ein eigenes Protokoll erfinden? Was ist, wenn das jemand austauschen will? Andere Programmiersprache? Neue Anforderungen, Zugriff aus anderen Systemen usw.? Encoding, Byte Order, Sprache? In spätestens 10 Jahren kommt der nächste Entwickler und denkt sich nur WTF, warum hat er das bloß von Hand gemacht und was soll ich jetzt damit anfangen? Die Probleme kenn ich aus der Arbeit. Wir haben auch teilweise eine Komponente von 1995, wo jemand ein eigenes Protokoll gebaut hat und wo über Sockets kommuniziert wird. Kennt niemand mehr, ist nicht dokumentiert, den Code versteht keiner mehr und er kompiliert auch nicht mehr so richtig. Gibt lauter Probleme mit dem Projekt, aber es ist dann auch nicht so wichtig, dass man es komplett umbauen wollen würde. Das läuft halt wie es läuft und niemand rührt es an.



  • Aus der Praxis für die Praxis gefällt mir. Bin auch der Meinung wer Visionen hat, sollte zum Arzt gehen. Wrapper/Klassen/Libraries zu entwickeln, die man als Frickellösung bezeichnen kann, finde ich allerding gut, um ein tiefergehendes Verständnis für einen (neuen) Bereich zu erlangen - wenn man Zeit hat. Dabei ist dann eine gute Dokumentation des Projektes gefragt (dafür braucht man Zeit, manchmal auch Lust) um ein solides, wiederverwendbares Stück Code (vulgär auch als Kot bezeichnet) zu bekommen. Allerdings meine ich damit nicht, beispielsweise die 7 Kammern des OSI-Modells zu meistern (Wortspiel, siehe 36 Kammern der Shaolin) - im Falle des OSI-Modells reicht dann auch mal Nummer sechs und sieben.

    In diesem Fall war mir der von dir genannte Service bzw. das Protokoll nicht bekannt, ist halt nicht meine Materie. Umso dankbarer bin ich also für deinen Hinweis.


Anmelden zum Antworten