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. :wink:

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
nkoehring hat geschrieben:du solltest den Spyro-Link mal updaten. Google spuckte mir dazu http://lsc.fie.umich.mx/~sadit/spyro/spyro.html aus.
Oh, tatsächlich. Habe ich korrigiert, danke.