我开始学习/编写Twisted网络编程,我遇到了以下代码:
def handle_REGISTER(self, name):
if name in self.factory.users:
self.sendLine("Name taken, please choose another.")
return
self.sendLine("Welcome, %s!" % (name,))
self.broadcastMessage("%s has joined the channel." % (name,))
self.name = name
self.factory.users[name] = self
self.state = "CHAT"
def handle_CHAT(self, message):
message = "<%s> %s" % (self.name, message)
self.broadcastMessage(message)
def broadcastMessage(self, message):
for name, protocol in self.factory.users.iteritems():
if protocol != self:
protocol.sendLine(message)
self.x[y]=self
的好处是什么?
答案 0 :(得分:1)
self.factory.users
是共享映射;该类的每个实例都可以访问它。如果您愿意,它是连接实例的中央注册表。连接本身负责注册。
通过在self.factory.users
中存储对所有每用户实例的引用,您可以使用broadcastMessage
方法向所有用户发送消息:
for name, protocol in self.factory.users.iteritems():
if protocol != self:
protocol.sendLine(message)
这将遍历所有已注册的实例,并在每个其他连接上调用sendLine()
。
答案 1 :(得分:0)
代码以两种方式使用自引用:
要实现#2,他们会迭代dict
self.factory.users
中的所有项目。密钥是聊天室中的用户。值是聊天的实例。
当protocol != self
时,代码找到了一个不属于当前用户的实例。