【问题标题】:twisted ReconnectingClientFactory fails without errors扭曲的 ReconnectingClientFactory 失败且没有错误
【发布时间】:2014-11-17 13:48:24
【问题描述】:

我今天给你的是这个日志:

2014-11-17 08:26:35-0500 [-] Log opened.
2014-11-17 08:26:35-0500 [-] twistd 14.0.2 (/usr/bin/python 2.7.8) starting up.
2014-11-17 08:26:35-0500 [-] reactor class: twisted.internet.epollreactor.EPollReactor.
2014-11-17 08:26:35-0500 [-] Starting factory <crawl_client.WhoisClientProtocolFactory instance at 0x7fc162a36440>
2014-11-17 08:26:35-0500 [Uninitialized] <twisted.internet.tcp.Connector instance at 0x7fc168b7fe60> will retry in 2 seconds
2014-11-17 08:26:35-0500 [Uninitialized] Stopping factory <crawl_client.WhoisClientProtocolFactory instance at 0x7fc162a36440>
2014-11-17 08:26:37-0500 [-] Starting factory <crawl_client.WhoisClientProtocolFactory instance at 0x7fc162a36440>
2014-11-17 08:26:37-0500 [Uninitialized] <twisted.internet.tcp.Connector instance at 0x7fc168b7fe60> will retry in 4 seconds
2014-11-17 08:26:37-0500 [Uninitialized] Stopping factory <crawl_client.WhoisClientProtocolFactory instance at 0x7fc162a36440>
2014-11-17 08:26:42-0500 [-] Starting factory <crawl_client.WhoisClientProtocolFactory instance at 0x7fc162a36440>
2014-11-17 08:26:42-0500 [Uninitialized] <twisted.internet.tcp.Connector instance at 0x7fc168b7fe60> will retry in 14 seconds
2014-11-17 08:26:42-0500 [Uninitialized] Stopping factory <crawl_client.WhoisClientProtocolFactory instance at 0x7fc162a36440>
2014-11-17 08:26:57-0500 [-] Starting factory <crawl_client.WhoisClientProtocolFactory instance at 0x7fc162a36440>

这是工厂代码:

from twisted.internet.protocol import ReconnectingClientFactory
from uuid import uuid4

class WhoisClientProtocolFactory(ReconnectingClientFactory):

  def __init__(self, clientName='', maxDelay=60):
    # attach a name with the client to identify itself to the server
    if not clientName:
      clientName = str(uuid4())[:8] # first 8 characters from a random string
    self.client_name = clientName
    self.maxDelay = maxDelay
    logFromClient("client started", logging.INFO, clientName)

  def buildProtocol(self, addr):
    self.resetDelay()
    return MyClientProtocol(self.client_name)

这段代码在我的测试机器上运行良好。当部署在服务器上时,它会绕着圈子走。我怎么能把手放在导致这种情况的原因上? 顺便说一下,客户端是基于LineReceiver的。

谢谢

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    当连接尝试失败时,调用工厂的clientConnectionFailed 方法。 ReconnectingClientFactory 实现此方法以添加重试行为和您看到的最小日志记录,以提供退避超时。

    您也可以覆盖此方法。引入您想要的额外日志记录 - 连接失败的原因作为参数传递给此方法 - 然后调用基本实现(以保留重试行为)。

    原因以Failure 实例的形式给出。

    【讨论】:

    • 感谢 JPC!。连接被拒绝。我从iptables 打开了端口,现在它可以工作了。
    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多