On 4/27/09 5:06 PM, Juanjo Conti wrote: > Hi, this is my first mail to the list. > > I am writing a server using Twisted, extending LineOnlyReceiver. In it I > maintain a list of clients connected. > > I'd like to poll every client for certain status information every 30 > seconds. Which is the correct approach to implement this? >
A simple option is to setup a task.LoopingCall in your factory to iterate over the list of clients every 30 seconds and issue your status request. I don't know if it is correct for your application, but this should illustrate the basic idea: from twisted.internet import reactor, task class StatusPollingReceiver(LineOnlyReceiver): def connectionMade(self): self.factory.clients.append(self) def lineReceived(self, line): print('Rx: %s' % line) def connectionLost(self, reason): self.factory.clients.remove(self) class StatusPollingFactory(Factory): def __init__(self): self.clients = [] # send a status request to each client every 30 seconds self.statusloop = task.LoopingCall(self.requestStatus) self.statusloop.start(30.0) def requestStatus(self): for client in self.clients: client.transport.write('stat\r\n') def stopFactory(self): self.statusloop.stop() def buildProtocol(self, addr): p = StatusPollingReceiver() p.factory = self return p see: http://twistedmatrix.com/documents/current/api/twisted.internet.task.LoopingCall.html _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python