Basit bir Twisted sorununu çözmeye çalışıyorum.Verileri Fabrika Görevleri Dışından, Görev Döngü Çağrısı ile tüm İstemcilere Gönderme İletisi
Kolaylık sağlamak için Python 2.7 Twisted Chat.py örneğini kullanıyorum.
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
class Chat(LineReceiver):
def __init__(self, users):
self.users = users
self.name = None
self.state = "GETNAME"
def connectionMade(self):
self.sendLine("What's your name?")
def connectionLost(self, reason):
if self.users.has_key(self.name):
del self.users[self.name]
def lineReceived(self, line):
if self.state == "GETNAME":
self.handle_GETNAME(line)
else:
self.handle_CHAT(line)
def handle_GETNAME(self, name):
if self.users.has_key(name):
self.sendLine("Name taken, please choose another.")
return
self.sendLine("Welcome, %s!" % (name,))
self.name = name
self.users[name] = self
self.state = "CHAT"
def handle_CHAT(self, message):
message = "<%s> %s" % (self.name, message)
for name, protocol in self.users.iteritems():
if protocol != self:
protocol.sendLine(message)
class ChatFactory(Factory):
def __init__(self):
self.users = {} # maps user names to Chat instances
def buildProtocol(self, addr):
return Chat(self.users)
reactor.listenTCP(8123, ChatFactory())
reactor.run()
Ne yapmaya çalışıyorum her 60 saniyede bir çalışır ve bağlı tüm oturumlar veri gönderen Görev oluşturmak için twisted.internet görevi kullanmaktır.
yarı Sözdekod
def broadcastmsg():
for client in factory:
client.protocol.transport.write("I am a Test\n\r")
event = task.LoopingCall(broadcastmsg)
event.start(60)
sorunu Doğru davranmaya Twisted alamayan olduğunu. Her seansta başarabilirim. Fakat sonra her iki kullanım için de spam'i iki kat daha fazla bağlar.
Bunu yaptım ama broadcast_msg dosyasında "error" i yükseltirsem, izleme kodu "' 'd = self.looping_call.start (60); d.addErrback (twisted.python.log.err) '' 'Bu konuda yardımcı olabilir misiniz? – rolele