gpt4 book ai didi

python - Twisted 应用程序中的协议(protocol)列表

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:39 26 4
gpt4 key购买 nike

我想知道管理 Twisted 中事件协议(protocol)的最佳方法是什么,或者是否没有具体的方法。

在我当前的应用程序中,我创建了一个字典,其中有两个字段。在其中一个我将远程用户和本地用户放在另一个用户中。这两个字段都是列表,因此我可以添加多个项目。

我使用的方法如下。首先,我通过 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,它们是可用于实现某些异步数据流模式的数据结构,但对于像列表中具有多个实体的基本观察者模式这样简单的东西,常规列表和字典等就可以了。

关于python - Twisted 应用程序中的协议(protocol)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com