是否有一种方法可以持续侦听到节点的web3连接,并在节点失败时重新启动。我期待一些类似的。这是很常见的事情,但我在文档中找不到这个。如果不是,你们都用什么方法来处理断开连接和错误。
注:我指的是web3js v1.0
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)来重新启用它?
发布于 2020-11-14 22:52:46
另外,我应该使用web3 =新的Web3(provider)还是web3.setProvider(provider)来重新启用它呢?
至少对于web3js 1.3.0:
web3.setProvider(provider)将复职web3.currentProvider.connected连接因此,这里有一个可行的解决方案:
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)发布于 2018-05-06 13:46:37
我不认为web3库中有这样的事件,但是有另一种方法可以做类似的事情。isListening 参考
您可以创建一个函数,继续使用web3轮询isListening来检查是否仍然连接(setInterval可能有助于实现它),并在发生故障时重新连接。
如果您想要更改另一个提供的当前,则使用web3.setProvider,不确定您是否有正确的行为,以防止设置相同的行为。你得试试看。用web3 = new Web3(provider)创建一个新实例可能更安全。
https://ethereum.stackexchange.com/questions/47708
复制相似问题