just RPC

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

just RPC

Beitragvon droptix » Freitag 12. Oktober 2007, 20:09

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...
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Freitag 12. Oktober 2007, 20:18

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
My Website - 29a.ch
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Freitag 12. Oktober 2007, 21:09

JSON-RPC gibt es. Implementierungen sind mir so nicht bekannt, kann man möglicherweise aber selbst zusammenkombinieren.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Freitag 12. Oktober 2007, 21:44

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. ;)
My Website - 29a.ch

"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Freitag 12. Oktober 2007, 22:21

Wie schon geschrieben, ist HTTP ein Protokoll, welches sich gut für Datenübertragungen eignet. :wink:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: just RPC

Beitragvon gerold » Freitag 12. Oktober 2007, 22:31

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=]http://localhost:8080/get_image?imagename=kaetzchen.jpg&username=aaa&password=bbb[/code]
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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Samstag 13. Oktober 2007, 01:01

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 :)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: just RPC

Beitragvon Leonidas » Samstag 13. Oktober 2007, 09:13

droptix hat geschrieben:Gibt's für Python noch andere RPC-Ansätze als XML-RPC?

Ja, eine Menge :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Mittwoch 19. Dezember 2007, 06:37

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 19. Dezember 2007, 11:10

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]