Jelle Smet wrote:
Hi list,

My goals is to have concurrent and separated client sessions using xmlrpc.
Initially my though was that SimpleXMLRPCServer was able to create a new
object instance for each incoming request.
But this doesn't appear to be the case, unless I'm overlooking something,
if so please point me out.

Concider following simplified code

<cut code>
SimpleXMLRPCServer, is rather, well eh, simple and does not support sessions, which in an HTTP point of view makes sense (where XML-RPC is based on). So either build in some sort of session management or rewrite your functionality in such a ways that it isn't dependent on sessions (see my reimplementation after my sig).

--
MPH
http://blog.dcuktec.com
'If consumed, best digested with added seasoning to own preference.'

#! /usr/bin/env python
#'----------------example reimplementation----------------------------'
"XML RPC test"
import SocketServer
import SimpleXMLRPCServer
import random
import xmlrpclib
import threading


# Create a simple example class
class Randomizer(object):
    "Randomizer Docstring"
    def __init__(self):
        self.random_number = None

    def randomize(self):
        "create a new random number"
        self.random_number = random.randrange(0, 100000)

    def show_random(self):
        "show_random Docstring"
        self.randomize()
        return(self.random_number)

class Server(SocketServer.ThreadingMixIn,
             SimpleXMLRPCServer.SimpleXMLRPCServer):
    "Multi-threaded XML RPC Server"
    # pylint: disable-msg=R0904
    def __init__(self):
        address = ('localhost', 8000)
        SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, address)
        self.allow_none = True
        self.register_instance(Randomizer())
        self.register_function(self.shutdown_service)
        self.register_introspection_functions()
    # pylint: enable-msg=R0904

    def shutdown_service(self):
        "Stop server"
        self.shutdown()


class Thread(threading.Thread):
    "Run Server in a thread for testing purposes"
    def run(self):
        "Run the service"
        service = Server()
        service.serve_forever()

if __name__ == '__main__':
    URL_PORT = 'http://localhost:8000'
    TEST_THREAD = Thread()
    TEST_THREAD.start()
    SESSION1 = xmlrpclib.ServerProxy(URL_PORT)
    SESSION2 = xmlrpclib.ServerProxy(URL_PORT)
    print(SESSION1.show_random())
    print(SESSION2.show_random())
    SESSION_STOP = xmlrpclib.ServerProxy(URL_PORT)
    SESSION_STOP.shutdown_service()
#'----------------example reimplementation----------------------------'
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to