Twisted deferred在连接失败后不可调用

2024-10-02 14:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我的客户工厂在这里:

import logging, traceback
from twisted.internet.protocol import ClientFactory
from twisted.internet import defer, reactor, ssl
from twisted.application import service
from protocols.smpp.protocol import SMPPClientProtocol

class SMPPClientFactory(ClientFactory):

    protocol = SMPPClientProtocol

    def __init__(self, config):
        self.config = config

    def getConfig(self):
        return self.config

    def clientConnectionFailed(self, connector, reason):
        print "clientConnectionFailed"

        self.connectDeferred.errback(reason)

    def clientConnectionLost(self, connector, reason):
        print "clientConnectionLost"

    def connect(self):
        self.connectDeferred = defer.Deferred()
        factory = SMPPClientFactory(self.config, self.msgHandler)

        self.log.warning('Establishing TCP connection to %s:%d' % (self.config.host, self.config.port))
        reactor.connectTCP(self.config.host, self.config.port, factory)

        return self.connectDeferred

它在这里启动代码:

^{pr2}$

当连接失败(远程服务器关闭)时,我调用了factory的clientConnectionFailed,但奇怪的是它得到了一个“属性异常:SMPPClientFactory实例没有属性“connectDeferred”。在

当连接失败时我需要调用errback,在处理延迟时似乎缺少一些东西。。在


Tags: fromimportselfconfigfactorydeftwistedprotocol
1条回答
网友
1楼 · 发布于 2024-10-02 14:29:43

在启动代码中,实例化了一个SMPPClientFactory并对其调用connect()。此特定实例将具有connectDeferred属性。但是,connect还实例化了另一个SMPPClientFactory:factory = SMPPClientFactory(self.config, self.msgHandler),这是您用来创建实际连接的实例。它没有connectDeferred属性,因为从未调用过此实例的connect。在

相关问题 更多 >