首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果断开连接,监视并重新启动web3连接

如果断开连接,监视并重新启动web3连接
EN

Ethereum用户
提问于 2018-05-06 12:27:44
回答 2查看 8.4K关注 0票数 1

是否有一种方法可以持续侦听到节点的web3连接,并在节点失败时重新启动。我期待一些类似的。这是很常见的事情,但我在文档中找不到这个。如果不是,你们都用什么方法来处理断开连接和错误。

注:我指的是web3js v1.0

代码语言:javascript
复制
var web3 = new Web3(provider);
web3
    .on('disconnect', function() {
        web3 = new Web3(provider);
    })
    .on('error', function() {
        web3 = new Web(3provider);
    });

另外,我是否应该使用web3 = new Web3(provider)web3.setProvider(provider)来重新启用它?

EN

回答 2

Ethereum用户

发布于 2020-11-14 22:52:46

另外,我应该使用web3 =新的Web3(provider)还是web3.setProvider(provider)来重新启用它呢?

至少对于web3js 1.3.0:

  • web3.setProvider(provider)将复职
  • 测试是否仍由web3.currentProvider.connected连接

因此,这里有一个可行的解决方案:

代码语言:javascript
复制
const newProvider = () => new Web3.providers.WebsocketProvider('ws://localhost:8546', {
        reconnect: {
          auto: true,
          delay: 5000, // ms
          maxAttempts: 5,
          onTimeout: false,
        },
      })
   
const web3 = new Web3(newProvider())

const checkActive = () => {
  if (!web3.currentProvider.connected) {
    web3.setProvider(newProvider())
  }
}

setInterval(checkActive, 2000)
window.addEventListener('focus', checkActive)
票数 2
EN

Ethereum用户

发布于 2018-05-06 13:46:37

我不认为web3库中有这样的事件,但是有另一种方法可以做类似的事情。isListening 参考

您可以创建一个函数,继续使用web3轮询isListening来检查是否仍然连接(setInterval可能有助于实现它),并在发生故障时重新连接。

如果您想要更改另一个提供的当前,则使用web3.setProvider,不确定您是否有正确的行为,以防止设置相同的行为。你得试试看。用web3 = new Web3(provider)创建一个新实例可能更安全。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/47708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档