2015-11-03 48 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,它們是可用於實現某些異步數據流模式的數據結構,但對於列表中具有多個實體的基本觀察者模式這樣簡單的東西,常規列表和詞典等正好。