Hallo alle zusammen,
im Zuge einer Überlegung sich tiefer mit der Programmierung mit PHP und C bzw. C++ in Form eines Browsergames zu beschäftigen, nicht zuletzt durch meine momentane Ausbildung begründet, stelle ich mir die Frage welche Schnittstellen zwischen PHP und C++ existieren und welche sich besonders effizient für Browsergames nutzen lassen.
Welche Schnittstellen zwischen PHP und C/C++ sind euch bekannt?
Welche Schnittstelle ließe sich effizient für eine Browsergame nutzen, bezüglich "Server und Deamons"?
Hat jemand von euch schon Erfahrungen damit sammeln können?
Bin für alle sinnvollen, konstruktiven Antworten dankbar.
Mit Dank für eure Bemühungen verbleibe ich
Mit freundlichen Grüßen
RoKa
P.S.: Bitte keine "Onkel Google"-Antworten; Den habe ich bereits gefragt. Ebenso möchte ich keine "in meine Hände gelegte" Lösung haben. Es geht mir nur um Möglichkeiten/Lösungen und deren Potentiale. Danke.
Browsergames, Sprachen und....
gepostet vor 18 Jahre von RoKa
gepostet vor 18 Jahre von Agmemon
Es gibt viele Schnittstellen, kommt halt darauf an, was Du machen willst.
Die einfachste Schnittstelle werden wohl Systemcalls sein. Sprich Du rufst aus PHP heraus Programme, z.B. in C/C++ geschrieben, auf Betriebsystem-Eben auf. Diese Art es zu machen hat den Vorteil, dass es sehr einfach ist, aber die Kommunikation ist beschränkt.
Als zweite Möglichkeit würde mir die Kommunikation über Sockets einfallen. Sprich Deine PHP-Anwendung baut eine Socketverbindung zu den C/C++ Anwendungen auf und kommunizieren darüber. Technisch nicht so schwer, aber man muss sich eine Art "Protokoll" ausdenken, über das die Anwendungen kommunizieren.
Etwas "moderner" wären vermutlich Mechanismen, wie XML-RPC oder SOAP. Mit entsprechenden Bibliotheken eigentlich ganz einfach. Aber es gibt ein wenig mehr Overhead, als bei der Socket-Kommunikation. Kommt also drauf an, wie gesprächig die Komponenten sind und ob sie auf der gleichen Maschine liegen oder nicht.
Dann gibt es, wenn ich es richtig in Erinnerung habe, diverse Frameworks, wie icePHP, vielleicht ist das ja was, bin mir aber nicht sicher.
Und zu guter letzt, kann man natürlich noch selbst Module für PHP schreiben.
Mit XML-RPC und SOAP habe ich gute Erfahrungen gemacht, habe es aber unter PHP noch nicht probiert. Systemcalls sind immer einfach, aber eigentlich nur dazu geeignet, Aufgaben zu delegieren, und man sollte sich schon ganz sicher sein, was man da Aufruft und ob das funktioniert. Socket-Kommunikation ist performant und auch für komplexere Sachen geeignet. Habe in PHP für eine Clanseite mal eine Funktion geschrieben, die per Socketverbindung die Statistiken von Spielern aus dem battle.net bezogen hat, als es die Bot-Schnittstelle im BNet noch gab. Das ging richtig gut.
Die einfachste Schnittstelle werden wohl Systemcalls sein. Sprich Du rufst aus PHP heraus Programme, z.B. in C/C++ geschrieben, auf Betriebsystem-Eben auf. Diese Art es zu machen hat den Vorteil, dass es sehr einfach ist, aber die Kommunikation ist beschränkt.
Als zweite Möglichkeit würde mir die Kommunikation über Sockets einfallen. Sprich Deine PHP-Anwendung baut eine Socketverbindung zu den C/C++ Anwendungen auf und kommunizieren darüber. Technisch nicht so schwer, aber man muss sich eine Art "Protokoll" ausdenken, über das die Anwendungen kommunizieren.
Etwas "moderner" wären vermutlich Mechanismen, wie XML-RPC oder SOAP. Mit entsprechenden Bibliotheken eigentlich ganz einfach. Aber es gibt ein wenig mehr Overhead, als bei der Socket-Kommunikation. Kommt also drauf an, wie gesprächig die Komponenten sind und ob sie auf der gleichen Maschine liegen oder nicht.
Dann gibt es, wenn ich es richtig in Erinnerung habe, diverse Frameworks, wie icePHP, vielleicht ist das ja was, bin mir aber nicht sicher.
Und zu guter letzt, kann man natürlich noch selbst Module für PHP schreiben.
Mit XML-RPC und SOAP habe ich gute Erfahrungen gemacht, habe es aber unter PHP noch nicht probiert. Systemcalls sind immer einfach, aber eigentlich nur dazu geeignet, Aufgaben zu delegieren, und man sollte sich schon ganz sicher sein, was man da Aufruft und ob das funktioniert. Socket-Kommunikation ist performant und auch für komplexere Sachen geeignet. Habe in PHP für eine Clanseite mal eine Funktion geschrieben, die per Socketverbindung die Statistiken von Spielern aus dem battle.net bezogen hat, als es die Bot-Schnittstelle im BNet noch gab. Das ging richtig gut.
gepostet vor 18 Jahre von Fornax
Was du natürlich vergessen hast: Über eine Datenbank. Das ist zwar nicht wirklich schön, erfüllt aber seinen Zweck.
gepostet vor 18 Jahre von exe
Wenn du einen C++ Daemon hast mit dem das PHP Frontend kommunizieren soll würden sich normale Sockets anbieten, wie das bei anderen Diensten wie Datenbanken auch läuft.
Der Vorteil daran ist, dass Daemon und Frontend räumlich unabhängig voneinander sind (anders als bei Shared Memory Mechanismen z.B.). D.h. du kannst, bei Lastproblemen, Frontend und Daemon auf unterschiedlichen Servern laufen lassen ohne deine Kommunikationsschnittstelle umzustellen.
Was die Geschwindigkeit angeht sind Sockets ebenfalls schnell genug. Ich habe mal für ein Chatsystem einen kleinen Test gemacht und dabei 20.000 kurze (~40 Zeichen) Nachrichten pro Sekunde durch einen einzelnen Socket bekommen (auf einer alten 700mhz Gurke).
Vorteil ist ebenfalls, dass Sockets, anders als Shared Memory Geschichten, in PHP ohne zusätzliche Erweiterungen möglich sind. Und die Benutzung ist einfach. Kannst einen Socket mit fsockopen bzw. pfsockopen aufmachen und dann über die normalen Dateifunktionen (fread, fwrite usw.) darauf zugreifen.
Fazit: einfach umzusetzen und effizient genug. Wenn ich in der Situation wäre würde ich vermutlich Socketverbindungen zwischen Daemon/Frontend benutzen.
Der Vorteil daran ist, dass Daemon und Frontend räumlich unabhängig voneinander sind (anders als bei Shared Memory Mechanismen z.B.). D.h. du kannst, bei Lastproblemen, Frontend und Daemon auf unterschiedlichen Servern laufen lassen ohne deine Kommunikationsschnittstelle umzustellen.
Was die Geschwindigkeit angeht sind Sockets ebenfalls schnell genug. Ich habe mal für ein Chatsystem einen kleinen Test gemacht und dabei 20.000 kurze (~40 Zeichen) Nachrichten pro Sekunde durch einen einzelnen Socket bekommen (auf einer alten 700mhz Gurke).
Vorteil ist ebenfalls, dass Sockets, anders als Shared Memory Geschichten, in PHP ohne zusätzliche Erweiterungen möglich sind. Und die Benutzung ist einfach. Kannst einen Socket mit fsockopen bzw. pfsockopen aufmachen und dann über die normalen Dateifunktionen (fread, fwrite usw.) darauf zugreifen.
Fazit: einfach umzusetzen und effizient genug. Wenn ich in der Situation wäre würde ich vermutlich Socketverbindungen zwischen Daemon/Frontend benutzen.
gepostet vor 18 Jahre von RoKa
Vielen Dank für diese ausführlichen Antworten und Erfahrungsberichte; Sehr hilfreich. Ich denke für meine Zwecke sollte eine Kommunikation von Frontend und Deamon bzw. Backend über Sockets wegen der möglichen Parameterübergabe ausreichend sein.
Mit freundlichen Grüßen
RoKa
Mit freundlichen Grüßen
RoKa