Changeset a97394b for fedd/fedd.py


Ignore:
Timestamp:
Oct 7, 2008 11:03:50 AM (16 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
Children:
8ecfbad
Parents:
eee2b2e
Message:

beginnings of a real multithreaded server

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd.py

    reee2b2e ra97394b  
    1717from fedd_deter_impl import new_feddservice
    1818from service_error import *
     19
     20from threading import *
    1921
    2022# The SSL server here is based on the implementation described at
     
    166168                version="0.1")
    167169
    168         self.set_defaults(host="localhost", port=23235,
    169                 transport="soap",debug=0)
     170        self.set_defaults(host="localhost", port=23235, transport="soap",
     171                debug=0)
    170172
    171173        self.add_option("-d", "--debug", action="count", dest="debug",
     
    177179        self.add_option("-p", "--port", action="store", type="int",
    178180                dest="port", help="Port to listen on (default %default)")
     181        self.add_option("-s", "--service", action="append", type="string",
     182                dest="services",
     183                help="Service description: host:port:transport")
    179184        self.add_option("-x","--transport", action="store", type="choice",
    180185                choices=("xmlrpc", "soap"),
     
    182187        self.add_option("--trace", action="store_const", dest="tracefile",
    183188                const=sys.stderr, help="Print SOAP exchange to stderr")
     189
     190def run_server(s):
     191    if s: s.serve_forever()
     192
     193services = [ ]
     194servers = [ ]
    184195
    185196opts, args = fedd_opts().parse_args()
     
    209220            raise
    210221
    211 if opts.transport == "soap":
    212     s = fedd_server(SOAP_port, fedd_soap_handler, ctx, impl)
    213 elif opts.transport == "xmlrpc":
    214     s = fedd_server(SOAP_port, fedd_xmlrpc_handler, ctx, impl)
     222if opts.services:
     223    for s in opts.services:
     224        h, p, t  = s.split(':')
     225
     226        if not h: h = opts.host
     227        if not p: p = opts.port
     228        if not t: h = opts.transport
     229
     230        p = int(p)
     231
     232        services.append((t, (h, p)))
    215233else:
    216     s = None
    217 
    218 s.serve_forever()
     234    services.append((opts.transport, (opts.host, opts.port)))
     235
     236for s in services:
     237    if s[0] == "soap":
     238        servers.append(fedd_server(s[1], fedd_soap_handler, ctx, impl))
     239    elif s[0] == "xmlrpc":
     240        servers.append(fedd_server(s[1], fedd_xmlrpc_handler, ctx, impl))
     241    else: print >>sys.stderr, "Unknown transport: %s" % s[0]
     242
     243for s in servers:
     244    t = Thread(target=run_server, args=(s,))
     245    t.start()
Note: See TracChangeset for help on using the changeset viewer.