Überprüfen Sie, ob web3js mit dem Knoten verbunden ist

Ich habe eine private Kette mit mehreren Knoten. Die Verbindung mit nur einem funktioniert einwandfrei. Wenn dieser jedoch ausfällt, möchte ich mich mit einem der anderen Knoten verbinden.

Bei Verwendung von web3js 1.0.0 beta 26 scheint es laut Dokumentation keine Möglichkeit zu geben, zu wissen, ob Sie mit dem Knoten verbunden sind oder nicht, es sei denn, Sie versuchen es mit einem TX oder Anruf und es wird Ihnen mitgeteilt, dass es fehlschlägt, weil eine Eigenschaft von web3 ist nicht definiert.

Also habe ich versucht, es zu "hacken" und einen Trick anzuwenden, aber bisher kein Ergebnis. Durch das Festlegen eines Anbieters wird Ihre web3-Variable immer auf etwas gesetzt, auch wenn Sie keine Verbindung zum Knoten herstellen konnten.

Hier ist ein Beispiel dafür, was ich versucht habe:

function getNode() {
    console.log("getting node");
    for (let i = 0; i <= nodeInfo.length - 1; i++) {
        let web3 = new Web3(new Web3.providers.HttpProvider(nodeInfo[i].ip + ':' + nodeInfo[i].port));
        console.log(web3.currentProvider.connected);
        if (web3.currentProvider.connected) {
            console.log("Provider is: " + web3.currentProvider.connect + " at " + i + " loop");
            return web3;
        }
    }
    return null;
}

Ich habe auch versucht, Rückrufe zu verwenden und zu prüfen, ob eth (oder eine Eigenschaft von web3) nicht undefiniert ist oder was auch immer, aber ich kann keine Verbindung zu anderen Knoten herstellen, wenn der Standardknoten ausgefallen ist.

Weiß jemand, wie man überprüft, ob man tatsächlich wirklich mit einem Node verbunden ist oder nicht?

Antworten (1)

Versuchen Sie dies, es verbindet sich auch wieder mit dem Knoten. Verwenden von web3js@1.0 Beta

web3.eth.net.isListening().then((s) => {
    console.log('We\'re still connected to the node');
}).catch((e) => {
    console.log('Lost connection to the node, reconnecting');
    web3.setProvider(your_provider_here);
})