[Twisted-Python] Architecture question for multiple client connections (longish)
Mark Johnston
mjohnston at skyweb.ca
Wed Aug 11 12:39:38 MDT 2004
I'm working on a small Twisted program to take care of conditional access for
a digital cable system. All that really involves is receiving high-level
update packets with a TCP server, storing the info into a database, and
building and transmitting low-level update packets to the cable converters.
Because of the way the tuners work, the update packets have to be sent (via
TCP) to 10-15 different IPs, each one belonging to a different encoder.
I'm not really sure what the proper way to build a system like this is. I've
got the two Protocols written and working OK, and now I'm looking at how to
propagate information from one to the other. When I get an update packet on
the high-level interface, I update the database, but I then want to have the
low-level connections send an update to the encoders.
What I don't understand is how Factories come into the situation. It looks,
from the examples, that factories generally are instantiated for each
connection [reactor.connectTCP(host, port, Factory())]. Supposing I
instantiate the factories and save them:
for h in hosts:
cf = MyClientFactory()
reactor.connectTCP(h, 12345, cf)
client_factories.append(cf)
Now, I get a high-level update on my server connection, which, after parsing,
ends up running:
class ServerProtocol(Protocol):
# . . .
def activate_converter(self, converter):
self.dbpool.runOperation("SQL etc.")
# now send an update to each encoder for the converter
That's where I'm stuck. The best I can do is:
for f in self.factory.factories:
f.last_proto.send(the_update)
This requires a special server factory that stores a list of the client
protocol factories, and a special client factory that stores the last
protocol instance it returned. It seems like there must be a better way to
accomplish this - perhaps without making a factory for each client protocol,
which seems inelegant.
Thanks for any suggestions,
Mark
More information about the Twisted-Python
mailing list