2015-11-03 20 views
1

我想知道哪些是管理Twisted中活动协议的最佳方式,或者如果没有具体的方法。Twisted应用中的协议列表

在我目前的应用程序中,我创建了一个字典,其中有两个字段。在一个我把远程用户和本地用户到另一个。这两个字段都是列表,所以我可以添加几个项目。

我使用的方法如下。首先我通过尝试来检查 - 除非字典存在。如果没有字典,我创建它。

try: 
     if self.factory.active_protocols: 
      log.msg('Active protocols dictionary already created') 
    except Exception as e: 
     log.err(e) 
     self.factory.active_protocols = {} 
     self.factory.active_protocols.setdefault('localUsr', []) 
     self.factory.active_protocols.setdefault('remoteUsr', []) 

然后我检查,如果本地用户在本地用户列表。如果没有用户,我将它添加到本地用户列表中。如果列表存在,则会引发错误。

if sUsername in self.factory.active_protocols['localUsr']: 
     log.err('Client already logged in') 
     raise UnauthorizedLogin('Client already logged in') 
    else: 
     # Attach local user to active protocols list. 
     self.sUsername = sUsername 
     self.factory.active_protocols['localUsr'].append(self.sUsername) 

如果条件合适的远程用户也被添加到用下面的代码的远程用户的列表。

 # If time is correct, attach remote user to active_protocols 
     self.factory.active_protocols['remoteUsr'].append(remoteUsr) 

当我断开用户,我使用下面的代码删除列表。

if self.sUsername in self.factory.active_protocols['localUsr']: 
     self.factory.active_protocols['localUsr'] = [] 
    if self.remoteUsr in self.factory.active_protocols['remoteUsr']: 
     self.factory.active_protocols['remoteUsr'] = [] 

有没有更正确的方法来做到这一点?应该实现一些特殊的字典吗?创建一个列表?是否使用扭曲的专有方法?

我一直在寻找关于互联网的信息,我还没有发现任何决定性的。

谢谢!

回答

1

不,在Twisted中没有特殊类型的列表或字典可用于此目的。

Twisted的工作是将网络事件转换为对象上的方法调用。一旦你在这些对象上实现这些方法,尽可能地,你想要使用常规的Python数据结构。 Twisted中有一些东西,如Deferreds,它们是可用于实现某些异步数据流模式的数据结构,但对于列表中具有多个实体的基本观察者模式这样简单的东西,常规列表和词典等正好。