Hi
folgendes Problem
Und zwar würden wir gerne C++ bei uns ins Spiel miteinbinden um die komplexen Berechnungen und so durchzuführen.
Nun ist jedoch die Frage wie machen wir das am schlauesen ohne das ganze Spiel umwerfen zu müssen.
Hat wer Tipps für mich oder paar Links wo man Info über sowas herbekommt
Wie binde ich C++ oder so in das Spiel ein
gepostet vor 19 Jahre, 7 Monate von Dead
gepostet vor 19 Jahre, 7 Monate von Temruk
Du solltest dich ganz genau Fragen, wozu du c einsetzen willst. Zweifelsohne ist ein optimiertes c allemal schneller als ein php aber es reist auch nicht Welten raus. Bei uns laufen die hintergrundservices auf c. Alles was du brauchst hat Linux standardmässig dabei. Nur wenn du von der php seite kommst und willst dann auf C heißt das umdenken und investieren.
Bei uns hat der umbau bei einem 4000-Zeilen Skript mit rund 50 DB-Anfragen etwa 15% Performance gebracht.
Bei uns hat der umbau bei einem 4000-Zeilen Skript mit rund 50 DB-Anfragen etwa 15% Performance gebracht.
gepostet vor 19 Jahre, 7 Monate von Dead
wir wollen die ganzen berechnungen in c++ ablaufen
erst haben wie geplant nur in c zu coden und das dann mit sockets zu machen
doch jetzt da wir doch lieber den größten teil in php machen ist die fragen wie machen wir das am besten
erst haben wie geplant nur in c zu coden und das dann mit sockets zu machen
doch jetzt da wir doch lieber den größten teil in php machen ist die fragen wie machen wir das am besten
gepostet vor 19 Jahre, 7 Monate von BLUESCREEN
Formulier deine Frage mal genauer und mach Beispiele. :roll:
Was denn nun?
Meint du
a) ausschließlich vom Server initiierte Berechnungen (Rundenwechsel, Rohstoffwachstum, usw.), die auch ausgeführt werden würden, wenn niemand auf der Website ist, oder
b) vom Client aufgerufene Berechnungen (User geht auf eine Seite -> irgendwas muss berechnet werden -> als Ergebnis muss er eine HTML-Seite erhalten)?
Für den ersten Fall muss der Server nur das Programm starten (z.B. per Cronjob).
Für den zweiten Fall ruft der User, wie du sagst, ein PHP-Skript auf und es müssen Berechnungen angestellt werden.
Da hast du dann zwei einfache Möglichkeiten:
1. Das PHP-Skript ruft ein C++-Programm auf (nicht zu empfehlen, da der PHP-Interpreter aus sicherheitsgründen nicht das Recht haben sollte, Programme auszuführen)
2. Du hast überhaupt kein PHP-Skript mehr, sondern ein C++-Programm übernimmt dessen Aufgabe -> das C++-Programm müsste über CGI aufgerufen werden (bei CGI-Anwendungen unbedingt sehr auf die Sicherheit achten!)
Also, um welche Berechnungen geht es nun genau?
Und kann es sein, dass der Großteil der Rechenzeit für Datenbankabfragen draufgeht und damit PHP nicht der Flachenhals ist und somit ein C++-Programm auch nicht schneller wäre?
die komplexen Berechnungen und so
die ganzen berechnungen
Was denn nun?
Meint du
a) ausschließlich vom Server initiierte Berechnungen (Rundenwechsel, Rohstoffwachstum, usw.), die auch ausgeführt werden würden, wenn niemand auf der Website ist, oder
b) vom Client aufgerufene Berechnungen (User geht auf eine Seite -> irgendwas muss berechnet werden -> als Ergebnis muss er eine HTML-Seite erhalten)?
Für den ersten Fall muss der Server nur das Programm starten (z.B. per Cronjob).
Für den zweiten Fall ruft der User, wie du sagst, ein PHP-Skript auf und es müssen Berechnungen angestellt werden.
Da hast du dann zwei einfache Möglichkeiten:
1. Das PHP-Skript ruft ein C++-Programm auf (nicht zu empfehlen, da der PHP-Interpreter aus sicherheitsgründen nicht das Recht haben sollte, Programme auszuführen)
2. Du hast überhaupt kein PHP-Skript mehr, sondern ein C++-Programm übernimmt dessen Aufgabe -> das C++-Programm müsste über CGI aufgerufen werden (bei CGI-Anwendungen unbedingt sehr auf die Sicherheit achten!)
Also, um welche Berechnungen geht es nun genau?
Und kann es sein, dass der Großteil der Rechenzeit für Datenbankabfragen draufgeht und damit PHP nicht der Flachenhals ist und somit ein C++-Programm auch nicht schneller wäre?
gepostet vor 19 Jahre, 7 Monate von Kallisti
Das C/C++ backend könnte als service auf dem system laufen und nur über die Datenbank mit dem Spiel interagieren - damit umgeht man cron und Kommandozeilenphp und das sollte schon Performancezuwachs bringen.
So haben wir es auch laufen, eigentlich ganz nett.
So haben wir es auch laufen, eigentlich ganz nett.
gepostet vor 19 Jahre, 7 Monate von Gambler
Genauso wie Kallisti das hat ist es bei uns auch geplant. Ist auch um einiges einfacher zu Programmiern wenn man nur mit der Datenbank arbeiten muss.
gepostet vor 19 Jahre, 7 Monate von Gambler
OK hab jetzt nochn paar Möglichkeiten.
Bin noch am schwanken.
andere Möglichkeiten wären noch:
eigenes Apache Modul schreiben
eigene PHP Extension (statisch oder dynamisch)
oder eine Schnittstelle für PHP und C programmiern statts einfach MySQL dafür zu benutzen.
Man sieht viele Wege führn nach Rom. Kommt halt ganz auf das eigene können und die Vor und Nachteile aller Varianten an.
Am einfachsten wär natürlich die Kommunikation nur über die Datenbank, allerdings ist dann die Skalierung nicht so optimal.
Eine Extension hätte dann z.B. den Vorteil dass ich wenn der Code mal läuft Änderungen direkt in PHP machen kann und nicht immer wieder an den C Code muss.
Vom Apache Modul halt ich gar nix da es umständlich ist und die Vorteile der anderen Methoden größer sind.
Wer richtig Speed will macht am besten was eigenes für die Kommunikation, das macht zwar mehr arbeit und die Code wartung ist nicht so einfach wie bei ner Extension aber man kann Datensätze im Ram halten und was einem noch so einfällt.
Geht zwar genauso mit MySQL für die Kommunikation aber dann muss man sehr gut aufpassen um keine Datenbank Inkonsistenz zu bekommen. Und besonders da ist MySQL sehr beschränkt im Gegensatz zu anderen Datenbanken.
Bin noch am schwanken.
andere Möglichkeiten wären noch:
eigenes Apache Modul schreiben
eigene PHP Extension (statisch oder dynamisch)
oder eine Schnittstelle für PHP und C programmiern statts einfach MySQL dafür zu benutzen.
Man sieht viele Wege führn nach Rom. Kommt halt ganz auf das eigene können und die Vor und Nachteile aller Varianten an.
Am einfachsten wär natürlich die Kommunikation nur über die Datenbank, allerdings ist dann die Skalierung nicht so optimal.
Eine Extension hätte dann z.B. den Vorteil dass ich wenn der Code mal läuft Änderungen direkt in PHP machen kann und nicht immer wieder an den C Code muss.
Vom Apache Modul halt ich gar nix da es umständlich ist und die Vorteile der anderen Methoden größer sind.
Wer richtig Speed will macht am besten was eigenes für die Kommunikation, das macht zwar mehr arbeit und die Code wartung ist nicht so einfach wie bei ner Extension aber man kann Datensätze im Ram halten und was einem noch so einfällt.
Geht zwar genauso mit MySQL für die Kommunikation aber dann muss man sehr gut aufpassen um keine Datenbank Inkonsistenz zu bekommen. Und besonders da ist MySQL sehr beschränkt im Gegensatz zu anderen Datenbanken.