Gesundheitscheck auf Websocket

Ich habe die Dokumentation durchgesehen und fand das nicht hilfreich.

Ich würde gerne wissen, wie ich am besten einen Gesundheitscheck für meine Websocket-Verbindung zu Geth durchführen kann (Ich habe gestern herausgefunden, dass ich das neue Ereignis von vor ein paar Tagen ohne Grund nicht erhalten habe).

Ich habe eine Lösung, aber es ist wahrscheinlich nicht der Best-Practice-Ansatz.

const web3 = new Web3(new Web3.providers.WebsocketProvider(networkUri));

setInterval(() => {
  console.log('Check WS status');
  let subscription;
  new Promise((resolve, reject) => {
    subscription = web3.eth.subscribe('pendingTransactions')
      .on('data', function () {
        return resolve(true);
      })
      .on('error', function () {
        return reject(false);
      });
  })
    .then(() => {
      console.log('OK');
    })
    .catch(() => {
      console.log('NOK');
      reconnect();
    })
    .finally(() => {
      // unsubscribes the subscription
      subscription.unsubscribe(function (error, success) {
        if (success)
          console.log('Successfully unsubscribed!');
      });
    })
}, 30000);

Grüße

Antworten (1)

Anscheinend gibt es ein offenes Problem zu diesem Problem:

https://github.com/ethereum/web3.js/issues/1391

https://github.com/ethereum/web3.js/issues/1558

Wie es heißt (habe es nicht selbst getestet), gibt es ein Endereignis, das das Schließen erkennen sollte

const wes3 = new Web3(new Web3.providers.WebsocketProvider('wss://rinkeby.infura.io/ws'));

wes3._provider.on('end', (eventObj) => {
    console.log('Disconnected: ');
    console.log(eventObj);
});
Entschuldigen Sie die späte Antwort, leider erhalte ich nie das 'End'-Ereignis ... Ich habe versucht, meine Internetverbindung auszuschalten, aber ich habe nichts empfangen