This message is more appropriate for the twisted-python list, as it has
nothing to do with "web", so I've cross-posted it there.
On 3 Jun, 10:57 pm, [email protected] wrote:
I've got a simple little chat server set up that people can telnet
into.� The code is as follows:
from twisted.internet import reactor
from twisted.internet.protocol import ServerFactory
from twisted.protocols.basic import LineOnlyReceiver
import threading
^ This is where things start to go (horribly) wrong.
The protocol looks basically correct, but this part:
def Test():
��� global test
��� factory.sendMessageToAllClients('Hey.')
��� test = threading.Timer(1.0,
Test)
��� test.start()
test = threading.Timer(1.0, Test)
test.start()
is very, very wrong. You cannot call Twisted APIs from a thread. Ever.
This is very important :). The behavior to you appeared to be some
strange timing issues, but you can get anything from corrupted data to
crashing the entire program.
Is there any way to get this to send the message and have it show up
for a client even when they're idle?
Yes. Use the reactor's timed-event APIs rather than threads. In other
words, do this, after you create your factory:
from twisted.internet.task import LoopingCall
LoopingCall(factory.sendMessageToAllClients, 'Hey.').start(1.0)
You may be interested to also read about these APIs:
http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.task.LoopingCall.html
http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.interfaces.IReactorTime.html
_______________________________________________
Twisted-web mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web