私達はどうやってweb 3 jsのブロックチェーンを処理して再接続しますか?
5110 ワード
本論文では、Web 3 JSを使って生産環境における自動処理ブロックチェーンの切断接続方法を学びます.下記の方法はWeb 3 JS 1.0.0-beta.35バージョンに適用されますが、安定した1.2*に対して.バージョンも適用されるべきです.
問題の説明
もしあなたのチームが生産にWeb 3 JSを使うなら、Web 3 JSに内蔵されている再接続機能がないことを認識してブロックチェーンの切断や再起動を処理しなければなりません.したがって、通常、接続が切断されると、NodeJSサービスも再起動してブロックチェーンに再接続する必要がある.これは非常に実用的な方法ではない.
解けます
NodeJSで優雅にブロックチェーンの切断を処理する方法を見せてください.Web 3 JSライブラリにおいて、Providerの対象は以下のようなイベントを提供してくれます.接続-接続を確立する エラー-提供プログラムエラー 終了-提供プログラム接続が終了しました. 接続を切断したら、endイベントを利用して新しいWeb 3 JS接続を再起動できます.この点を理解するための例を見ましょう.
ファイルconnection.js
このファイルでは、NodeJSとブロックチェーンとの接続を処理します.我々は、Web 3のアクティブな接続オブジェクトに戻るnewBlockchainconnection方法を持っています.
ブロックチェーンの接続切断については、プロバイダが「終了」イベントをトリガすると、タイムアウト後にフィードバックをトリガします.その後、このイベントは、関数を順次呼び出して、新たなブロックチェーン接続を作成します.
注意すべき点:時には、Web 3 JSは同じ接続のために切断されて、複数の「終了」イベントを送信しますので、切断イベントを処理したかどうか確認しなければなりません. 「set Provider」を使用して、新しいweb 3のインスタンス を作成する代わりに、web 3のインスタンスオブジェクトに新しいプロバイダを設定する.提供プログラムをリセットし、アクティブなリスタ を削除する.再接続間隔は通常少なくとも5秒であり、ブロックチェーンの再起動には約5秒が必要である. Skepsのような多くの技術をリードする会社はブロックチェーンを使って革命的な製品を開発しています.この新しい時代の技術について次の文章を書くまで、引き続き注目してください.
https://skeps.com/blog/how-we-handle-blockchain-reconnects-in-web3js
From:https://hackernoon.com/how-we-handle-blockchain-reconnects-in-web3js-t5fu37ik
問題の説明
もしあなたのチームが生産にWeb 3 JSを使うなら、Web 3 JSに内蔵されている再接続機能がないことを認識してブロックチェーンの切断や再起動を処理しなければなりません.したがって、通常、接続が切断されると、NodeJSサービスも再起動してブロックチェーンに再接続する必要がある.これは非常に実用的な方法ではない.
解けます
NodeJSで優雅にブロックチェーンの切断を処理する方法を見せてください.Web 3 JSライブラリにおいて、Providerの対象は以下のようなイベントを提供してくれます.
ファイルconnection.js
このファイルでは、NodeJSとブロックチェーンとの接続を処理します.我々は、Web 3のアクティブな接続オブジェクトに戻るnewBlockchainconnection方法を持っています.
const web3 = require ( "web3" );
let hasProviderEnded = false , web3Instance, reconnectInterval = 10000 ;
async function newBlockchainConnection ( webSocketProvider, endCallback ) {
// create new provider
const provider = new web3.providers.WebsocketProvider(webSocketProvider);
hasProviderEnded = false ;
// connect event fires when the connection established successfully.
provider.on( 'connect' , () => console .log( "connected to blockchain" ));
// error event fires whenever there is an error response from blockchain and this event also has an error object and message property of error gives us the specific 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( () => {
// emitting 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
}
ファイルap.jsconst 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
}
要約ブロックチェーンの接続切断については、プロバイダが「終了」イベントをトリガすると、タイムアウト後にフィードバックをトリガします.その後、このイベントは、関数を順次呼び出して、新たなブロックチェーン接続を作成します.
注意すべき点:
https://skeps.com/blog/how-we-handle-blockchain-reconnects-in-web3js
From:https://hackernoon.com/how-we-handle-blockchain-reconnects-in-web3js-t5fu37ik