EnTeQuAk hat geschrieben:btw. du hast öfters XMLRPC erwähnt, als eine Möglichkeit Daten auszutauschen zwischen Client und Server. Was steckt dahinter? -- Was genau ist so ein XML-RPC Server? -- Wie werden dort die Daten übertragen?
Hi EnTeQuAk!
Das ist in Python so ziemlich die einfachste Möglichkeit, Daten zwischen einem Serverprogramm und einem Clientprogramm auszutauschen. Der Datenaustausch läuft über das zustandslose HTTP-Protokoll. Das heißt, dass du vom Client aus Funktionen auf dem Server aufrufen kannst. Dann bekommst du vom Server irgendwelche Daten zurück. Du kannst aber nicht vom Server aus eine Funktion auf dem Client ausführen. Dafür bräuchtest du zusächlich eine Verbindung in die entgegengesetzte Richtung. Da das aber fast nie gebraucht wird, ist XMLRPC so ziemlich das einfachste was es unter Python gibt.
http://www.python-forum.de/topic-5478.html
Wenn du z.B. Text vom Client zum Server übertragen möchtest, dann schreibst du auf dem Server eine Funktion, die einen Text als Argument entgegen nehmen kann. Vom Client aus rufst du diese Funktion mit dem entsprechenden Argument auf.
Da das Protokoll sehr einfach ist, bist du auf die einfachen Datentypen (str, int, float, tupple, list, dictionary) eingeschränkt. Du kannst aber auch Binärdaten übertragen lassen.
Diese Binärdaten kannst du z.B. so ``xmlrpclib.Binary("ich bin binaer")`` in einen übertragbaren String umwandeln und als Argument übergeben. Der Empfänger bekommt die Binärdaten über das Attribut ``data`` wieder aus dem Container raus.
-
http://docs.python.org/lib/module-xmlrpclib.html
-
http://docs.python.org/lib/module-Simpl ... erver.html
Man muss nicht einmal den XMLRPC-Server laufen lassen. Man kann einen XMLRPC-Handler auch von einem CGI-Programm aus aufrufen. So lässt sich XMLRPC auch dann verwenden, wenn nur Port 80 zur Verfügung steht. Man lässt den Apachen "servieren" und ein CGI-Skript beantwortet die GET- oder POST-Anfrage mit gültigem XMLRPC. Der Apache gibt das Ganze dann per HTTP wieder zurück. Die Daten sind in eine XML-Struktur eingepackt.
lg
Gerold
