Mehrere Ports öffnen?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

INFACT hat geschrieben:Meinst du mit dem Modul socket?
Hallo INFACT!

Das Socket-Modul kümmert sich um das Versenden von Datenpaketen in bestimmten Größen und das Empfangen von Datenpaketen in bestimmten Größen. Es ist eine Low-Level-Schnittstelle um Daten von einem Programm/Rechner zu einem anderen zu schicken. Es kümmert sich nicht um die Datenstruktur.
Genau dafür gibt es High-Level-Schnittstellen wie z.B. XML-RPC (Beispiel), JSON-RPC, Pyro, usw.

Die einfachste Variante ist XML-RPC. Denn das ist bei den mit Python mitgelieferten Paketen schon mit dabei. Einfacher geht's nicht. Allerdings hat XML-RPC den Nachteil, dass es nicht performant ist, da es ziemlich viel Overhead mitschickt. Siehe: http://de.wikipedia.org/wiki/XML-RPC#Beispiele

Gleich einfach einzusetzen, aber mit viel weniger Overhead ist JSON-RPC. Siehe: http://en.wikipedia.org/wiki/JSON-RPC#Examples

Der Vorteil solcher High-Level-Schnittstellen ist, dass du dich nicht mehr um die Datenübertragung und um das Parsen der übertragenen Daten kümmern musst. Du kannst nämlich bei diesen High-Level-Schnittstellen direkt auf Funktionen verweisen.

Das heißt, dass du z.B. eine Funktion mit dem Namen "get_version_info" schreiben kannst und diese dann vom Client aus direkt aufrufen kannst. Die Rückgabe der aufgerufenen Funktion, die irgendwo auf einem Server ausgeführt wird, bekommst du auf dem Client zurück, als ob du die Funktion lokal aufgerufen hättest. Alles was dazwischen steckt (Netzwerkkommunikation, Parsen der übergebenen Parameter, usw.) ist damit nicht mehr wichtig.

Du kannst an diese Funktionen Parameter übergeben und bekommst auch Daten zurück. Alles was mit "normalen" Datenstrukturen wie Int, Str, List, Dict ist damit mehr als einfach handhabbar.

Wenn du also z.B. Koordinaten per Remote-Funktion übergibst und Irgendwelche Koordinaten zurück erwartest, dann bist du damit ziemlich gut bedient.
Wenn du nur ab und zu mal Binärdaten wie z.B. ein Bild vom Server holen musst -- ist es zwar langsamer als LowLevel-Datenübertragung, da es die Daten erst am Server in einen Text umwandelt und dann am Client wieder in die Binärdaten zurückwandelt, aber dafür ist es immer noch einfach handhabbar.
Sollte diese Art der Datenübertragung für manche Daten zu langsam werden, dann kann man (genau diesen Teil) einer anderen Datenübertragungsart übergeben. Z.B. direkt per Asyncore, asynchat oder vielleicht doch etwas höher per HTTP.
Und weil wir gerade dabei sind: HTTP ist wahrscheinlich gar nicht mal so schlecht für deine Zwecke geeignet.

Na dann lasse ich es mal wieder.

mfg
Gerold
:-)

PS: JSON-RPC: http://json-rpc.org/

PS2: fühlt sich etwas komisch an, aber vielleicht auch interessant für dich: http://github.com/niligulmohar/python-symmetric-jsonrpc

.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten