# The exchange process which everything connects to. import netsvc import signal dispatcher = netsvc.Dispatcher() dispatcher.monitor(signal.SIGINT) exchange = netsvc.Exchange(netsvc.EXCHANGE_SERVER) exchange.listen(11111) dispatcher.run() # The server side of the interaction. import netsvc import signal class Service(netsvc.Service): def __init__(self): netsvc.Service.__init__(self,"math") self.joinGroup("web-services") self.exportMethod(self.multiply) def multiply(self,x,y): return x*y dispatcher = netsvc.Dispatcher() dispatcher.monitor(signal.SIGINT) exchange = netsvc.Exchange(netsvc.EXCHANGE_CLIENT) exchange.connect("localhost",11111,5) service = Service() dispatcher.run() # The client side of the interaction. import netsvc import signal import random class Client(netsvc.Service): def __init__(self): netsvc.Service.__init__(self,"") self.startTimer(self.call,1,"1") def call(self,name): service = self.serviceEndPoint("math") if service != None: x = int(random.random()*1000) id = service.multiply(x,x) self.monitorResponse(self.result,id) self.startTimer(self.call,1,"1") def result(self,square): print square dispatcher = netsvc.Dispatcher() dispatcher.monitor(signal.SIGINT) exchange = netsvc.Exchange(netsvc.EXCHANGE_CLIENT) exchange.connect("localhost",11111,5) client = Client() dispatcher.run() # A gateway which allows XML-RPC style requests to the same service. import signal import netsvc import netsvc.xmlrpc dispatcher = netsvc.Dispatcher() dispatcher.monitor(signal.SIGINT) httpd = netsvc.HttpDaemon(8000) rpcgw = netsvc.xmlrpc.RpcGateway("web-services") httpd.attach("/xmlrpc/service",rpcgw) httpd.start() exchange = netsvc.Exchange(netsvc.EXCHANGE_CLIENT) exchange.connect("localhost",11111,5) dispatcher.run()