Seite 1 von 1
just RPC
Verfasst: Freitag 12. Oktober 2007, 20:09
von droptix
Gibt's für Python noch andere RPC-Ansätze als XML-RPC? Ich suche sowas wie SimpleXMLRPCServer, was sich aber auch für Dateiübertragungen eignet... bei SimpleXMLRPCServer müsste man Binärdaten immer Base64-codieren; außerdem macht XML etwas Overhead...
Verfasst: Freitag 12. Oktober 2007, 20:18
von veers
Wenn du mit XML-RPC Daten übertragen willst bietet es sich an diese per HTTP zu übertragen. RPC bietet sich, soweit ich das beurteilen kann, nicht zum Übertragen von Daten an. Dazu brauchst du Streams und nicht Calls.
- Jonas
Verfasst: Freitag 12. Oktober 2007, 21:09
von Y0Gi
JSON-RPC gibt es. Implementierungen sind mir so nicht bekannt, kann man möglicherweise aber selbst zusammenkombinieren.
Verfasst: Freitag 12. Oktober 2007, 21:44
von veers
Y0Gi hat geschrieben:JSON-RPC gibt es. Implementierungen sind mir so nicht bekannt, kann man möglicherweise aber selbst zusammenkombinieren.
Löst das Problem mit den Files/Streams aber auch nicht.

Verfasst: Freitag 12. Oktober 2007, 22:21
von Joghurt
Wie schon geschrieben, ist HTTP ein Protokoll, welches sich gut für Datenübertragungen eignet.

Re: just RPC
Verfasst: Freitag 12. Oktober 2007, 22:31
von gerold
droptix hat geschrieben:Dateiübertragungen
Hallo droptix!
Ich halte veers Vorschlag, HTTP für den Datentransfer zu verwenden, für sehr gut.
Hier ein Beispiel mit CherryPy:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import cherrypy
from cherrypy.lib.static import serve_file
class Root(object):
def get_image(self, imagename, username, password):
if username == "aaa" and password == "bbb":
return serve_file(r"H:\GEROLD\Bilder und Videos\%s" % imagename)
else:
return "nix da..."
get_image.exposed = True
cherrypy.quickstart(Root())
Aufruf:
Code: Alles auswählen
http://localhost:8080/get_image?imagename=kaetzchen.jpg&username=aaa&password=bbb
Außerdem kann CherryPy gleichzeitig auch als XMLRPC-Server für die normalen RPC-Aufrufe verwendet werden.
So könnte dann der Server aussehen:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import cherrypy
from cherrypy.lib.static import serve_file
from cherrypy._cptools import XMLRPCController
class Root(object):
def get_image(self, imagename, username, password):
if username == "aaa" and password == "bbb":
return serve_file(r"H:\GEROLD\Bilder und Videos\%s" % imagename)
else:
return "nix da..."
get_image.exposed = True
class XmlRpc(XMLRPCController):
def xmlrpctest(self, text):
return {"text": text}
xmlrpctest.exposed = True
def main():
# Tree zusammensetzen
root = Root()
root.xmlrpc = XmlRpc()
# Starten
cherrypy.quickstart(root)
if __name__ == "__main__":
main()
Der XMLRPC-Client:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import socket
socket.setdefaulttimeout(3) # Timeout auf 3 sec. setzen
import xmlrpclib
server = xmlrpclib.ServerProxy("http://localhost:8080/xmlrpc/")
print server.xmlrpctest("Servus")
Der Image-Download:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import urllib2
import urllib
URL = "http://localhost:8080/get_image"
data = {
"imagename": "kaetzchen.jpg",
"username": "aaa",
"password": "bbb"
}
data = urllib.urlencode(data)
dest = file("kaetzchen.jpg", "wb")
dest.write(urllib2.urlopen(URL, data).read())
dest.close()
mfg
Gerold

Verfasst: Samstag 13. Oktober 2007, 01:01
von Y0Gi
veers hat geschrieben:Y0Gi hat geschrieben:JSON-RPC gibt es. Implementierungen sind mir so nicht bekannt, kann man möglicherweise aber selbst zusammenkombinieren.
Löst das Problem mit den Files/Streams aber auch nicht.

Hab' ich ja gar nicht bestritten

Re: just RPC
Verfasst: Samstag 13. Oktober 2007, 09:13
von Leonidas
droptix hat geschrieben:Gibt's für Python noch andere RPC-Ansätze als XML-RPC?
Ja,
eine Menge 
Verfasst: Mittwoch 19. Dezember 2007, 06:37
von nkoehring
auch wenn der Thread zwei Monate her ist:
@Leonidas:
du solltest den Spyro-Link mal updaten. Google spuckte mir dazu
http://lsc.fie.umich.mx/~sadit/spyro/spyro.html aus.
Verfasst: Mittwoch 19. Dezember 2007, 11:10
von Leonidas
Oh, tatsächlich. Habe ich korrigiert, danke.