Twisted 应用程序中的协议列表
Protocols list in Twisted app
我想知道哪种方法是管理 Twisted 中活动协议的最佳方法,或者是否没有具体方法。
在我当前的应用程序中,我创建了一个字典,其中有两个字段。一个我把远程用户和本地用户放到另一个。这两个字段都是列表,因此我可以添加多个项目。
我使用的方法如下。首先,我通过 try-except 检查字典是否存在。如果没有字典,我就创建它。
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'] = []
有没有更正确的方法呢?应该实施某种特殊的字典吗?创建列表?是否使用 Twisted 的专有方法?
我一直在寻找有关互联网的信息,但我没有找到任何关于它的结论。
谢谢!
不,Twisted 中没有特殊类型的列表或字典可供您使用。
Twisted 的工作是将网络事件转化为对您的对象的方法调用。一旦你在这些对象上实现了这些方法,你就想尽可能地使用常规的 Python 数据结构。 Twisted 中有某些东西,例如 Deferreds
,它们是您可以用来实现某些异步数据流模式的数据结构,但对于像列表中具有多个实体的基本观察者模式这样简单的东西,常规列表和字典之类的就好了。
我想知道哪种方法是管理 Twisted 中活动协议的最佳方法,或者是否没有具体方法。
在我当前的应用程序中,我创建了一个字典,其中有两个字段。一个我把远程用户和本地用户放到另一个。这两个字段都是列表,因此我可以添加多个项目。
我使用的方法如下。首先,我通过 try-except 检查字典是否存在。如果没有字典,我就创建它。
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'] = []
有没有更正确的方法呢?应该实施某种特殊的字典吗?创建列表?是否使用 Twisted 的专有方法?
我一直在寻找有关互联网的信息,但我没有找到任何关于它的结论。
谢谢!
不,Twisted 中没有特殊类型的列表或字典可供您使用。
Twisted 的工作是将网络事件转化为对您的对象的方法调用。一旦你在这些对象上实现了这些方法,你就想尽可能地使用常规的 Python 数据结构。 Twisted 中有某些东西,例如 Deferreds
,它们是您可以用来实现某些异步数据流模式的数据结构,但对于像列表中具有多个实体的基本观察者模式这样简单的东西,常规列表和字典之类的就好了。