Autor Beitrag
DarkHunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 477

Win XP
D3 Prof, D2005 PE
BeitragVerfasst: So 15.01.06 18:59 
Hallo,

ich schreibe in meiner Freizeit ein wenig an einem Browsergame (Zusammen mit Flamediver).
Naja ich habe die Entwicklungs des Kampfsystems übernommen.
Nun stehe ich vor dem Problem, dass ich mit PHP nicht weiterkomme (50 Sekunden Kampf für 10.000 Einheiten ist inakzeptabel) .
Ich erhoffe mir mit einem "echten" (kompilierten) Programm eine besserung der Performance, zumal Delphi was Klassen und Records angeht, einfach besser ist als PHP.

Nun muss ich es aber irgendwie schaffen eine Verbindung zwischen PHP und Delphi herzustellen.
Von PHP aus ist es möglich ein externen Programm zu starten (exec, system ...)
Allerdings wie mache ich es das mein Programm auch weiß was es machen soll, ich kann schlechte ganze Arrays die verarbeitet werden sollen implodieren und als Parameter übergeben.

Wie könnte man am besten eine Komunikation zwischen Delphi und dem PHP-Script herstellen?

MFG
DarkHunter

_________________
I believe that every human has a finite number of heart-beats. I don't intend to waste any of mine running around doing exercises.
- Neil Armstrong
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: So 15.01.06 19:03 
Das Problem ist, das die meisten - um nicht zu sagen fast alle - Webserver mit einem Unix/Linux OS laufen. Das heißt du müsstest eine Anwendung für Linux schreiben. Aber selbst wenn das (z.B, mit Kylix) möglich ist, laufen Webserver meistens auf einem hohen Sicherheitskontext, der das starten von Anwendungen auf dem Server nicht gestattet.

Wenn Du es Clientseitig implementieren willst, würd ich es über Flash oder (Delphihalber) ActiveX versuchen.

Alstar
DarkHunter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 477

Win XP
D3 Prof, D2005 PE
BeitragVerfasst: So 15.01.06 19:07 
Die Anwendung würde Serverseitig laufen.
:( mist

_________________
I believe that every human has a finite number of heart-beats. I don't intend to waste any of mine running around doing exercises.
- Neil Armstrong
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: So 15.01.06 19:14 
Schau doch nochmal in die Algorithmen rein. Vielleicht kannst du dort noch ein paar Optimierungen rausholen (Dauert das deswegen nur so lange, weil die Interpreter-Engine so langsam arbeitet und/oder weil die CPU-Auslastung durch die Algos zu hoch ist?)

Alstar
DarkHunter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 477

Win XP
D3 Prof, D2005 PE
BeitragVerfasst: So 15.01.06 19:16 
CPU-Auslastung kann ich nicht sagen, mein Lokaler Webserver ht konstante Auslastung. BZW die steigt nur unmerktlich an

Ich denke einfach der Interpreter ist nicht dafür ausgelegt, Teilweise 6D-Array zu bearbeiten.

_________________
I believe that every human has a finite number of heart-beats. I don't intend to waste any of mine running around doing exercises.
- Neil Armstrong
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: So 15.01.06 19:18 
Ist Delphi bestimmt auch nicht, wenn Du das Array komplett durchläufst. Ist dem denn so, oder musst Du pro Durchlauf (Prozedur etc) nur bestimmte Koordinaten in dem Array ansprechen?

Alstar
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 15.01.06 19:35 
Dass PHP eine schlechtere Objekt-Orientierung bietet als Delphi stimmt nur bedingt: PHP bietet zwar nicht alle Features aus Delphi; alles das, was man benötigt ist aber vorhanden.

Woran es meistens bei langsamen Programmen krankt, ist die Pre-Filterung der wirklich relevanten Daten. Schau also ersteinmal, ob Du überhaupt wirklich alle 10000 Einheiten vollständig gegen jede andere Prüfen musst. Ich denk nämlich nicht ... Lass es 1% relevante Datensätze sein, dann hast Du aber trotzdem schon Faktor 100 beschleunigt!!!

Lass SQL für dich arbeiten! Warum alles selber filtern? SQL-Server sind dafür da, aus großen Datenmengen die benötigten Datensätze zu gewinnen. Und das sogar schneller als manche Fest-Implementierung. Wenn Du also Nur Datensätze benötigst, in denen zwei Einheiten weniger als X Einheiten entfernt sind, deren Kampflevel identisch ist und mindestens einer meint, den anderen Attackieren zu müssen, dann frag doch die Datenbank, anstatt selber auf die Suche zu gehen ;-)

Ansonsten wird es mit der Kommunikation wie gesagt relativ kompliziert ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
DarkHunter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 477

Win XP
D3 Prof, D2005 PE
BeitragVerfasst: So 15.01.06 19:48 
Vielleicht sollte ich mal die Array-Struktur erläutern, damit klar ist worum es geht.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
$parties[0..1]
        - army => Armee die mit kämpfen dran ist
        - unit => Einheit aus army die mit kämpfen dran ist
        - done => 0: Noch nicht alle Einheiten haben gekämpfet; 1: alle haben gekämpft.
        - armies[0..n]
                - name => Name der Armee
                - weapons[0..11] => Die Schadenswerte der Waffen
                - crit[0..4] => die Chance auf Kritische Treffer je nach Rüstung (Grundwerte siehe $crit)
                - evade[0..4] => die Chance auf Ausweichen je nach Rüstung (Grundwerte siehe $evade)
                       - tactics => Taktik der Armee
                       - units[0..n]
                              - id => ID der Einheit (wird zum ermitteln aller anderen Werte benötigt)
                              - health => Lebenspunkte der Einheit

Der Ablauf sieht ungefähr so aus:
-Immer Abwechselnd wird eine Party genommen und aus der aktuellen Armee eine Einheit
-Diese wählt sich dann ein Ziel und führt ihre Schläge aus
-Solange bis alle Einheiten einmal an der Reihe waren
-Dann kommt die nächste Runde

Moderiert von user profile iconAXMD: Code-Tags repariert

_________________
I believe that every human has a finite number of heart-beats. I don't intend to waste any of mine running around doing exercises.
- Neil Armstrong