PHP mit c/c++ kombinieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP mit c/c++ kombinieren

    Huhu,

    was ist, wenn php mal zu langsam werden solltet und Ihr komplexe Berechnung per c++ vornehmen lassen wollt, wie macht Ihr es?

    Gibt es eine Schnitstelle zwischen php und c/c++? Oder würdet Ihr die Daten, die vom C Script kommen in eine DB abspeichern und dann per PHP auslesen, verarbeiten und ausgeben? ;)


    gruß,
  • Kommt darauf an, was du erreichen möchtest!
    PHP kann per exec() und diversen anderen Funktionen Scripte auf dem Server ausführen, sofern das zugelassen ist (habs selbst allerdings noch nie getestet). Eine andere Methode wäre - wie du gesagt hast - die komplexer berechneten Daten vom Cpp-Script in der Datenbank zu speichern (vllt ist das sowieso notwendig?). Die dritte Möglichkeit, die mir einfällt, wäre nicht direkt eine Berechnung mit Cpp, sondern einfach eine Beschleunigung von php durch cachen. Das wird bei großen Anwendungen sowieso benötigt (eAccelerator, ZendOptimizer).
    Jetzt kommt es eben nur darauf an, was du machen möchtest. Im Normalfall würde ich aber auf die letzten beiden Methoden setzen ..


    lG
  • Sorry, da hast du was missverstanden ;)
    In dem Zusammenhang hat Caching keinerlei Auswirkungen auf die Ergebnisse deines Codes. Laut Zend Optimizer und eAccelerator wird dein Code lediglich bis zu 40% schneller. Projekte wie de.wikipedia.org nutzen eAccelerator, um nicht immer php neu parsen zu müssen. Cache bedeutet in dem Fall einfach ein Code, der für die Compiler schneller zu lesen ist (womöglich schon weitgehenst C++). Dieser wird nur erneuert, wenn sich das php-Script ändert. Am Programm selber ändert sich also nichts.
    Nun kommt es nur darauf an, wie komplex deine Berechnungen sind!

    Ich werde für ein aktuelles Projekt eAccelerator nutzen und womöglich auch ein C++ Script ausführen, das laufend komplexere Algorithmen durchläuft und dabei Daten in einer Datenbank speichert. Kommt eben auf den einzelnen Fall an, welche Vorgehensweise die entsprechend richtige ist.



    lG
  • Wenn du auf das Ergebnis des C++ Programms angewiesen bist, so müssen die Programme irgendwie ihre Daten austauschen.
    Shared Memory wird hier schwierig, außerdem nicht praktikabel wenn dein PHP Code seine Daten auch mal aus anderen Quellen beziehen will.
    Bleiben Austauschformate wie XML oder JSON. Dazu kannst du auch exec benutzen.
    Das C++ Programm schreibt einen String im entsprechenden Format in stdout und PHP liest und verarbeitet es.

    Eine noch sauberere Schnittstelle hättest du, wenn du deinen C++ Code zu einem SOAP Server ausbaust.
    Dann startest du deinen C++ Code als Daemon und rufst ihn zur Laufzeit nur noch über die PHP SOAP Schnittstelle auf.
    Wenn so ein Code erstmal geschrieben ist bist du natürlich deutlich flexibler. Du kannst die Datenbankverbindung im C++ Code halten, kannst Sachen im Arbeitsspeicher ablegen, ...
    Und da SOAP standardisiert ist, kannst du das Backend jederzeit durch andere austauschen/erweitern.
  • Hi,

    das ist ja eine rein theoretische Frage von dir . Oder hast du ein konkretes Beispiel wo php wirklich versagt, was du uns auch mitteilen möchtest/darfst/kannst :) ?

    Ich kann mir grad ehrlich gesagt kein Szenario vorstellen indem php einbrechen sollte.
    Höchstens die Max Execution Time, welche man aber mit z.B Ajax und einem Ladebalken sehr schön umgehen kann.


    Meistens ist doch eher die Datenbank der Flaschenhals. Wobei ich daran an die Locks von MySQL denke.


    Eine ganz andere Alternative wäre aspx. Dort hast du die Möglichkeit alles in C++ zu schreiben, wobei die Verbreitung und Microsoft klare Nachteiloe sind.
    Oder gibt es schon eine Open Source Alternative wie Mono-Web ?


    Wenn du viele Berechnungen durchführst, dann werf ich mal Data-Warehouse in den Raum.