twisted - 为什么TCP4ServerEndpoint的回调和错误从不会触发?

时间:2013-06-17 22:36:48

标签: python twisted

无论我们是否成功收听,都不会调用回调。这是怎么回事?

def server_started(self, data, port):
    log.msg("Server listening on port %s." % (port))

def server_failed(self, data, port):
    log.err("Failed to listen on port %s." % (port), data)
    reactor.stop()

log.startLogging(sys.stdout)

port = 6000
endpoint = TCP4ServerEndpoint(reactor, port)
d = endpoint.listen(MyFactory())
d.addCallback(server_started, port)
d.addErrback(server_failed, port)
reactor.run()

1 个答案:

答案 0 :(得分:1)

回调和errback都不是可调用的,因为你已经定义了它们。

如果连接尝试成功,将完成相当于server_started(listeningPortObject, port)的操作。这将失败TypeError,因为server_started被定义为接受三个参数(令人困惑的是,其中一个被命名为self,这表明这实际上应该是一个类的方法,而不是一个免费的功能)。

如果连接尝试失败,将完成相当于server_failed(reason, port)的操作。这也会引发TypeError,因为server_failed也需要三个参数,而不是两个。

任何一个结果都会使d与未处理的TypeError等待另一个错误来处理它。