Datenaustausch XMLRPC Python-C

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Lufia
User
Beiträge: 83
Registriert: Samstag 13. Mai 2006, 10:04
Wohnort: Berlin

Hallo,
ich möchte mit Hilfe von XMLRPC 2 Programme miteinander kommunizieren lassen.

Ein Python (später ein C-Programm) soll dabei eine Anfrage an ein Pythonprogramm (Server) stellen. Der Server soll daraufhin etwas berechnen und das Ergebnis zurück schicken. Ich habe hier im Forum schon fleißig gesucht und bin auf folgende Idee gekommen wie man das umsetzen könnte, und wolllte fragen was ihr davon haltet. (Ich habe noch keine Ahnung von XMLRPC und XML)

Programmablauf
1) Programm stellt Anfrage an Server:
Die Daten werden in eine XML-Datei gepackt und diese an den Server gesendet.

2)Der Server berechnet etwas und sendet eine Ergebnisdatei zurück
Der Server startet ein Pythonprogramm oder schikt die Daten an ein Pythonprogramm wo die XML-Datei ausgelesen werden und mit den Werten etwas berechnet wird. Das Ergebnis wird dann zurück an gesendet.

WIe gesagt ich bin dabei noch blutiger Anfänger und hätte daher im ersten Schritt gerne 2 Pythonprogramme aufgestzt die einfach erstmal miteinander Daten über XML-Dateien austauschen. Ist XMLRPC und der Austausch über XML Dateien dafür geeignet? Die Programme komunizieren ziemlich "stark" miteinander. Evtl. vergleichbar mit einem Multiplayerspiel ist die Performance mit XML-RPC für soetwas hoch genug ? Der Datenaustausch erfolgt etwa alle 1-3 Sekunden.

Schon mal Danke für alle Ratschläge

Leo
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

1-3 Requests pro Sekunde sollten grundsätzlich kein Problem sein. Games brauchen aber normalerweise Latenzen unter 100ms (angenehm wird es erst unter 50). Es wirst du mit xmlrpc nicht erreichen ;) Und ob es Sinn macht Xml File per xmlrpc zu übertragen Wage ich zu bezweifeln. Grundsätzlich kannst du xmlrpc Aufrufe direkt mit Komplexeren Datentypen machen (Struct/Array).

Gruss,
Jonas
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Lufia hat geschrieben:ich möchte mit Hilfe von XMLRPC 2 Programme miteinander kommunizieren lassen.
[...]
ist die Performance mit XML-RPC für soetwas hoch genug ? Der Datenaustausch erfolgt etwa alle 1-3 Sekunden.
Hallo Leo!

Gute Idee. Der mit Python mitgelieferte XMLRPC-Server ist sehr einfach zu verwenden.

- http://www.python-forum.de/topic-5478.html
- http://www.python-forum.de/topic-7545.html

Probier den Threading XMLRPC-Server aus. Bei mir schafft der alle 50 Anfragen in drei Sekunden. Das sind also mehr als 15 Anfragen pro Sekunde. Mehr also du brauchst. Der einfache XMLRPC-Server, also der der die Arbeit nicht auf Threads aufteilt, braucht sogar nur zwei Sekunden. Dafür wird die wirkliche Arbeit dann aber auch nur hintereinander ausgeführt, was je nach Job dann doch wieder langsamer als mit dem "Threading XMLRPC-Server" sein kann.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Lufia
User
Beiträge: 83
Registriert: Samstag 13. Mai 2006, 10:04
Wohnort: Berlin

Alles klar,
vielen Dank für die schnelle Hilfe, auf die XML-Dateien kann ich dann ja sogar verzichten weil ich echt nur arrays hin/her schicken muss.

Von der Zeit her sollte das auch ausreichen es geht bei mir ja später nicht um ein komplexen Spieleserver. Das werde ich nur als Einstiegsbeispiel verwenden.
Später möchte ich Randbedingungen für ein Simulationsmodell das in C-Programmiert ist mit Python berchnen. Momentan mache ich das mit Embedded Python was aber gewisse Nachteile beim debuggen hat.

Danke

Leo
Lufia
User
Beiträge: 83
Registriert: Samstag 13. Mai 2006, 10:04
Wohnort: Berlin

Ich habe das Ganze (server/Client) jetzt getestet und es funktioniert wunderbar. Jetzt werde ich mal versuchen 2 Clients aufzusetzen die mit dem Server komunizieren.

Client2 wird gestartet und lauscht auf Server

Client1 sendet Anfrage an den Server (Client1 wartet auf eine Antwort)

Server leitet die Anfrage weiter an Client2

Client2 erzeugt eine Antwort und schickt sie an den Server

Server gitb die Antwort an den Client1 weiter.

Na da habe ich einiges vor, :)
Antworten