【发布时间】:2014-12-07 09:33:37
【问题描述】:
我正在制作一个扭曲的聊天应用程序。假设我的服务器的设计方式是,每当它检测到客户端在线时,它都会向客户端发送所有未决消息(该客户端的那些消息,因为它处于离线状态而被缓存在服务器上的 python 列表中)一个-在 while 循环中逐一递增,直到列表用完。像这样的:
class MyChat(LineReceiver):
def connectionMade(self):
self.factory.clients.append(self)
while True:
#retrieve first message from a list of pending-messages(queue) of "self"
msg = self.retrieveFromQueue(self)
if msg != "empty":
self.transport.write(msg)
else:
break
def lineReceived(self, line):
...
def connectionLost(self, reason):
...
def retrieveFromQueue(self, who):
msglist = []
if who in self.factory.userMessages:
msglist = self.factory.userMessages[who]
if msglist != []:
msg = msglist.pop(0) #msglist is a list of strings
self.factory.userMessages[self] = msglist
return msg
else:
return "empty"
factory.userMessages = {} #dict of list of incoming messages of users who aren't online
所以根据我对 Twisted 的理解,while 循环将阻塞主反应器线程,并且任何其他客户端与服务器的任何交互都不会被服务器注册。如果是这种情况,我想要一个替代代码/方法来替代这种方法,它不会阻塞扭曲的线程。
更新:由于应用的性质,每个用户可能有 2000-3000 条待处理消息。
【问题讨论】: