[Twisted-Python] The right way to broadcast to your TCP/IP clients?
Schneider, Michael
michael.l.schneider at ugsplm.com
Mon Mar 29 05:43:11 MST 2004
I am in a similar situation. I am use twisted a grid
server for each node on the computer.
I need to send info like "
- I am online
- Job started
- Job completed
- Ready for job
I am getting ready to prototype with jabber. Any other thought?
Thanks
Mike
----------------------------------------------------------------
Michael Schneider
Senior Software Engineering Consultant
UGS PLM Solutions - an EDS Company
"The Greatest Performance Improvement Is the transitioning from a non-working state to the working state"
> -----Original Message-----
> From: twisted-python-admin at twistedmatrix.com
> [mailto:twisted-python-admin at twistedmatrix.com]On Behalf Of Steve
> Freitas
> Sent: Sunday, March 28, 2004 11:20 PM
> To: twisted-python at twistedmatrix.com
> Subject: [Twisted-Python] The right way to broadcast to your TCP/IP
> clients?
>
>
> Hi all,
>
> I'm working on a chat server-ish kinda thang, and although
> the learning curve
> of twisted was a bit much for my last project, I'm back again
> for more
> punishment. In this case, I'm looking to broadcast a message
> from one client
> to other connected clients. I came up with a solution, but I
> wanted to run it
> by you guys to see whether what I'm doing is The Right Way To
> Do Things.
>
> Here's what I did for my simple prototype that takes any
> message received from
> a client and sends it to all clients (including the sender):
>
> -----------
>
> factory = Factory()
> factory.transports = []
>
> class Chatterbox(Protocol):
>
> def connectionMade(self):
> # Make a copy of the new connection's transport and
> # stick it somewhere all the Chatterbox instances can
> # get to it.
> self.factory.transports.append(self.transport)
>
> def dataReceived(self, data):
> # Every time a piece of data comes in, just write it back
> # out to all the transports, ergo, clients.
> for transport in self.factory.transports:
> transport.write(data)
>
> def connectionLost(self, reason):
> # When a client disconnects, delete the copy of their
> # transport. Bet this'll be slow w/ lotso clients.
> self.factory.transports.remove(self.transport)
>
> factory.protocol = Chatterbox
> reactor.listenTCP(8008, factory)
> reactor.run()
>
> -----------
>
> What do you think? Is this a properly twisted way to do
> things? Strike anyone
> as needlessly inefficient? I'm motivated to make it as fast
> as possible, so
> despite what Knuth said, any proferred optimizations would be
> great to hear.
> (On a related note, I intend to put the for loop into a map,
> but I haven't
> yet embarked on language optimizations, and this question's
> more about
> Twisted.)
>
> Also, I'm obviously, and perhaps incorrectly, assuming that
> once a transport
> object is created, it never gets changed. If it does, the
> copy I made won't
> be updated -- is this a problem?
>
> A definite problem with this method is that it sends the data
> right back to
> the sender, which actually isn't desirable for my
> application. Trouble is, to
> avoid it I think I'd have to do this...
>
> def dataReceived(self, data):
> for transport in self.factory.transports:
> if transport != self.transport:
> transport.write(data)
>
> Seems an inefficient way to do things, as I'd like this
> server to handle
> thousands of clients.
>
> Anyway, any help would be appreciated. :-)
>
> Thanks,
>
> Steve
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
More information about the Twisted-Python
mailing list