Seite 1 von 1

mehrere xmlrpc Server auf einem Port

Verfasst: Dienstag 19. Mai 2009, 15:10
von pug
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

Re: mehrere xmlrpc Server auf einem Port

Verfasst: Dienstag 19. Mai 2009, 18:59
von gerold
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
:-)

Verfasst: Freitag 22. Mai 2009, 07:03
von pug
Danke.

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

Grüße
Pug