mehrere xmlrpc Server auf einem Port

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
pug
User
Beiträge: 16
Registriert: Dienstag 4. September 2007, 17:00

Hallo zusammen,

ich schreibe gerade eine kleine Anwendung welche einige Funktionen via XML RPC bereitstellen soll. Darüber hinaus gibt es noch einige statischen HTML Datein welche ausgeliefert werden müssen.

Bei den über XML-RPC bereitgestellten Funktionen handelt es sich um zwei Klassen eine soll für eine Admin und Debug Interface sein, die andere für einen User client.

Ich möchte nicht, dass Userclient auf Funktionen zugreifen kann welche nur für den Debug Client vorgesehen sind. Aus diesem Grund setze ich im Augenblick zwei SimpleXMLRPCServer ein. Einen an Port 8000 und einen an Port 8001. In Zukunft muss ich auch noch ein paar Dateien via HTTP bereitstellen, was in meiner bisherigen Logik ein weiteren Port bedeuten würde.

Ich möchte jetzt gerne nur noch einen Port mit unterschiedlichen URIs nutzen.

Beispiel: Ich denke, dass das gehen irgendwie mit dem SimpleXMLRPCRequestHandler.rpc_paths funktionieren müsste, aber ich habe im Augenblick keine Idee wie das konkret funktionieren soll.

Wie könnte ich das realisieren?
Geht das überhaupt, ohne das ich gleich einen Apache aufsetze?

Grüße
Pug
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

pug hat geschrieben:einige Funktionen via XML RPC bereitstellen soll. Darüber hinaus gibt es noch einige statischen HTML Datein welche ausgeliefert werden müssen.
Hallo Pug!

Das könntest du z.B. mit CherryPy so lösen:

Server:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cherrypy
from cherrypy._cptools import XMLRPCController


class Root(object):
    
    def index(self):
        return """
        <html>
        <body>
          Hallo Welt als HTML
        </body>
        </html>
        """
    index.exposed = True
    

class XmlRpc(XMLRPCController):

    def xmlrpctest(self, text):
        return {"text": text}
    xmlrpctest.exposed = True


root = Root()
root.xmlrpc = XmlRpc()


def main():
    cherrypy.quickstart(root)


if __name__ == "__main__":
    main()
Client:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Einfacher XMLRPC-Client
"""

import socket
socket.setdefaulttimeout(3) # Timeout auf 3 sec. setzen
import xmlrpclib

server = xmlrpclib.ServerProxy("http://localhost:8080/xmlrpc/")
print server.xmlrpctest("Servus")
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pug
User
Beiträge: 16
Registriert: Dienstag 4. September 2007, 17:00

Danke.

Habe mir cherry.py mal angesehen - wird ab sofort öfter mal verwendung finden.

Grüße
Pug
Antworten