交换扭曲的客户端协议

问题描述 投票:1回答:1

在Twisted中,buildProtocol函数允许我为每个用户创建一个类。我希望能够为每个用户创建两个单独的类。一个用于连接时,另一个用于经过身份验证并准备加入房间并与客户聊天时。

这是我目前的buildProtcol:

    def buildProtocol(self, addr):
        connection = self.playerManager.createConnectionClient (addr)
        return connection

我希望能够在验证自己并将现有数据传输到新对象(self.playerManager.createPlayerClient (addr))后删除此对象。

如何将Twisted已存储的原始对象与新对象交换,以便新对象从现在开始接收所有数据?

我可以轻松地创建一个布尔值(isAuthenticated),然后将所有数据转发到新对象,但如果有办法销毁原始对象并将其替换为新对象,我宁愿不要同时拥有两个现有对象。

python sockets twisted
1个回答
0
投票

您正在寻找的确切事项 - 在运行时切换运输协议 - 尚未实施。有关详细信息,请参阅https://twistedmatrix.com/trac/ticket/3204

但是,你正在寻找的是略有错误。协议的工作是解析线路上的字节。如果您需要切换正在与之通信的Protocol对象以实现身份验证,那么您已经为Protocol对象提供了太多的责任。

相反,让您的协议解析消息,并在解析它们之后,将实际的应用程序逻辑委托给User对象上的方法。然后,当您进行身份验证时,切换出与之对话的User对象。这就是Twisted本身在IMAP,POP,SSH,HTTP和其他协议中实现身份验证的方式。

© www.soinside.com 2019 - 2024. All rights reserved.