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,它们是您可以用来实现某些异步数据流模式的数据结构,但对于像列表中具有多个实体的基本观察者模式这样简单的东西,常规列表和字典之类的就好了。