【问题标题】:Swapping Twisted Client Protocol交换 Twisted 客户端协议
【发布时间】:2014-12-09 01:38:59
【问题描述】:

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

这是我当前的 buildProtcol:

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

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

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

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

【问题讨论】:

    标签: python sockets twisted


    【解决方案1】:

    您正在寻找的确切东西——在传输协议运行时切换它——尚未实现。详情请见https://twistedmatrix.com/trac/ticket/3204

    但是,您要查找的内容略有错误。协议的工作是解析从线路传入的字节。如果您需要切换您正在与之交谈的协议对象以实现身份验证,那么您已经赋予您的协议对象太多的责任。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 2020-12-14
      相关资源
      最近更新 更多