交换扭曲的客户端协议

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交换扭曲的客户端协议相关的知识,希望对你有一定的参考价值。

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

这是我目前的buildProtcol:

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

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

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

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

答案

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

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

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

以上是关于交换扭曲的客户端协议的主要内容,如果未能解决你的问题,请参考以下文章

扭曲的多个协议

如果服务器不允许SSH连接,可以扭曲SFTP客户端吗?

如何使用javascript修复HTML画布对象中的扭曲/扭曲和剪切图像?

turn协议 数据交换过程

尝试使用扭曲的书中的示例代码echoserver.py连接到扭曲的服务器。获取错误无法收听多个地址

如何在扭曲的ALPN协商中侦听特定的下一个协议?