无论我们是否成功收听,都不会调用回调。这是怎么回事?
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()
答案 0 :(得分:1)
回调和errback都不是可调用的,因为你已经定义了它们。
如果连接尝试成功,将完成相当于server_started(listeningPortObject, port)
的操作。这将失败TypeError
,因为server_started
被定义为接受三个参数(令人困惑的是,其中一个被命名为self
,这表明这实际上应该是一个类的方法,而不是一个免费的功能)。
如果连接尝试失败,将完成相当于server_failed(reason, port)
的操作。这也会引发TypeError
,因为server_failed
也需要三个参数,而不是两个。
任何一个结果都会使d
与未处理的TypeError
等待另一个错误来处理它。