【问题标题】:nodejs reconnect net connectionnodejs重新连接网络连接
【发布时间】:2015-12-26 03:20:54
【问题描述】:

我有一个到套接字的网络客户端连接(使用 net.createConnection(port,host)。这工作正常。

但是,有时服务器可能会断开连接,我希望网络连接在服务器备份和运行时自动重新连接

我可以捕获 on('end') 事件以捕获初始断开连接,并尝试重新连接。

但是,我如何检查客户端是否已连接,因为我想在退避策略上每 n 毫秒重试一次

【问题讨论】:

    标签: node.js


    【解决方案1】:

    在您的end 处理程序中,设置一个超时以重试连接,并设置一个一次性connect 处理程序以取消超时。

    【讨论】:

    • 我认为我已经做到了,但是我如何检测连接尝试是否失败,以便再次重试?
    • 如果您的连接尝试成功,那么您的connect 处理程序将取消超时。这意味着如果您的超时代码完全运行,则连接尝试失败或仍在进行中。如果您适当地设置了超时值(足够长,如果到那时尝试还没有成功,则它不太可能成功),您可以简单地假设尝试失败并重试。
    【解决方案2】:

    这是另一种对我有用的方法。

    if ( !client.readable )
        client.connect(PORT,HOST);
    else
        logger.debug('Attempt to reconnect on an active connection. Ignored.');
    

    如果连接处于活动状态,则使用 client.readable 将立即返回一个值。如果没有,那么只需重新连接。使用 client.writable 失败。

    我发现这种方法更可靠,因为有时 END 或 CLOSE 事件不会发生(例如:VPN 关闭、服务器端崩溃或电源故障等)

    【讨论】:

      猜你喜欢
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      相关资源
      最近更新 更多