web3js中的区块链重新连接怎样去处理

在本文中,我们将学习如何使用Web3Js自动处理生产环境中的区块链断开。下面描述的方法适用于Web3Js版本1.0.0-beta.35,但是对于稳定的1.2 *版本也适用。

 web3js中的区块链重新连接怎样去处理_设计制作_可编程逻辑

问题描述

如果您的团队在生产中使用Web3Js,那么您必须意识到在Web3Js中没有内置的重新连接功能来处理区块链断开或重新启动。因此,通常情况下,当连接下降时,需要重新启动NodeJS服务以便再次连接到区块链。这不是一个很实用的方法。

解决方案

让我们看看我们如何优雅地处理NodeJS中区块链断开的情况。在Web3Js库中,程序为我们提供了以下事件

连接——建立连接

错误——程序错误

结束——程序连接结束。

断开连接后,我们可以利用终止事件重新启动一个新的Web3Js连接。让我们来看一个例子来理解这一点:

File connec     ti   on.js

在这个文件中,我们将处理NodeJS和区块链之间的连接。我们将有一个新区块链连接,它将返回一个Web3活动连接对象。

const web3 = require(“web3”);

let hasProviderEnded = false, web3Instance, reconnec  TI n     te   rval = 10000;

async func  TI on newBlockch     ai   nConnec  TI on(webSocketProvider, endCallback) {

// create new provider

const provider = new web3.provide     rs   .WebsocketProvider(webSocketProvider);

hasProviderEnded = false;

// connect event fires when the connec  TI on established successfully.

provider.on(‘connect’, () =》 console.log(“connected to blockchain”));

// error event fires whenever there is an error response f     rom   blockchain and this event also has an error object and message property of error gives us the spec     if   ic reason for the error

provider.on(‘error’, (err) =》 console.log(err.message));

// end event fires whenever the connection end is detected. So Whenever this event fires we will try to reconnect to blockchain

provider.on(‘end’, async (err) =》 {

// handle multiple event calls sent by Web3JS library

if (hasProviderEnded) return;

// setting hashProviderEnded to true as sometimes the end event is fired multiple times by the provider

hasProviderEnded = true;

// reset the current provider

provider.reset();

// removing all the listeners of provider.

provider.removeAllListeners(“connect”);

provider.removeAllListeners(“error”);

provider.removeAllListeners(“end”);

setTimeout(() =》 {

// e     mi   tting the restart event after some time to allow blockchain to complete startup

// we are listening to this event in the other file and this callback will initialize a new connection

endCallback();

}, reconnectInterval);

});

if (web3Instance == undefined) web3Instance = new web3(provider);

else web3Instance.setProvider(provider);

return web3Instance;

}

module.exports = {

newBlockchainConnection

}

File app.js

const connection = require(“connection”);

const web3JSConnection;

const endCallback = async function () {

web3JSConnection = await connection.newBlockchainConnection(‘ws://127.0.0.1:8545’, customEvent);

});

async function getWeb3Connection() {

if (web3JSConnection == undefined) web3JSConnection = await connection.newBlockchainConnection(‘ws://127.0.0.1:8545’, endCallback);

return web3JSConnection;

}

module.exports = {

getWeb3Connection

}

总结

在区块链断开连接时,当提供程序触发“终止”事件时,我们将在超时后触发回调。然后,该事件反过来调用函数来创建一个新的区块链连接。

需要注意的几点:

· 有时,Web3Js为同一个连接点向您发送多个“终止”事件,因此我们必须检查我们是否已经处理过一次断开事件。

· 使用“setProvider”在web3实例对象中设置新的提供程序,而不是创建一个新的web3实例。

· 重置提供程序并删除活动侦听器

· 重新连接的时间间隔必须至少是5秒,区块链重启大约需要5秒。

责任编辑:ct

17
185
0
68

相关资讯

  1. 1、UC浏览器如何添加书签?UC浏览器添加书签的方法步骤2836
  2. 2、Win10截图工具不能用了的解决办法1456
  3. 3、如何更改小红唇app的登录密码小红唇app更改登录密码的具体步骤291
  4. 4、Win7旗舰版如何共享打印机?378
  5. 5、淘客助手怎么推广?淘客助手推广方法2447
  6. 6、麒麟970相当于天玑多少?麒麟970和天玑720对比分析3950
  7. 7、如何用Steam修复游戏用Steam修复游戏的教程287
  8. 8、SmallPDF转换器怎么把图片转换成PDF?3654
  9. 9、Excel表格使用图标标识成绩的操作方法2069
  10. 10、三星手机怎么开启开发者选项?三星手机进入开发人员选项的方法1342
全部评论(0)
我也有话说
0
收藏
点赞
顶部