WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi · Oppitunti

Vankka virheiden välitys ja palautuminen

Kehitä strategioita virheenkäsittelyyn, lokitukseen ja hallittuun toimintojen rajoittamiseen WebSocket-sovelluksissa.

Oppitunti 2/411 vaihetta

Vankka virheiden välitys ja palautuminen on ilmainen WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-kurssilla on yhteensä 4 oppituntia.

Reaaliaikaisten virheiden käsittely

Luotettavien reaaliaikaisten sovellusten rakentaminen edellyttää muutakin kuin yhteyksien katkeamisten käsittelyä. Tarvitsette vankan strategian WebSocket-tiedonsiirrossa ilmenevien virheiden käsittelyyn.

Luotettava virheenkäsittely pitää sovelluksen vakaana, tarjoaa hyvän käyttökokemuksen ja auttaa diagnosoimaan ongelmat nopeasti.

Erilaiset virhetyypit

WebSocket-sovellusten virheet voivat johtua useista lähteistä:

  • Protokollavirheet: Näitä ovat esimerkiksi virheellisesti muodostetut kehykset tai virheelliset opkoodit. WebSocket-kirjasto käsittelee ne yleensä automaattisesti.
  • Sovelluslogiikan virheet: Palvelin- tai asiakaskoodin virheet, jotka aiheuttavat odottamatonta toimintaa tai kaatumisia viestien käsittelyn aikana.
  • Verkkovirheet: Esimerkiksi palomuurien, välityspalvelinten tai epävakaiden internet-yhteyksien aiheuttamat ongelmat, jotka johtavat usein yhteyden katkeamiseen.

Keskitymme sovellus- ja verkkovirheiden tehokkaaseen käsittelyyn.

Palvelimen virheenkäsittely

WebSocket-kirjastot tarjoavat palvelimella mekanismeja virheiden sieppaamiseen. Esimerkiksi Node.js:ssä suositun ws-kirjaston avulla sekä palvelininstanssi että yksittäiset asiakasyhteydet voivat lähettää 'error'-tapahtumia.

On erittäin tärkeää kuunnella näitä tapahtumia, jotta palvelin ei kaadu ja ongelmat voidaan kirjata vianmääritystä varten.

Palvelimen virhe käytännössä

Tämä Node.js-esimerkki näyttää yksinkertaisen WebSocket-palvelimen, joka heittää tarkoituksella virheen vastaanottaessaan tietyn viestin. Huomaa, kuinka wss.on('error')- ja ws.on('error')-käsittelijät sieppaavat sen.

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('Client connected');

  ws.on('message', function incoming(message) {
    console.log('Received: %s', message);
    if (message.toString() === 'cause error') {
      // Simulate an application logic error
      try {
        throw new Error('Simulated application error!');
      } catch (e) {
        console.error('Caught application error:', e.message);
        // In a real app, you might send this error to the client
        ws.send(JSON.stringify({ type: 'error', message: e.message }));
      }
    } else {
      ws.send(`Echo: ${message}`);
    }
  });

  ws.on('error', (error) => {
    console.error('WebSocket connection error:', error.message);
  });

  ws.on('close', () => {
    console.log('Client disconnected');
  });
});

wss.on('error', (error) => {
  console.error('WebSocket server error:', error.message);
});

console.log('WebSocket server started on port 8080');
// To run this example:
// 1. npm init -y
// 2. npm install ws
// 3. node server.js
// Then connect with a client and send 'cause error'

Asiakkaan virheenkäsittely

Asiakaspuolella selaimen natiivi WebSocket-objekti tarjoaa onerror-tapahtuman. Tämä tapahtuma laukeaa, kun yhteyden muodostamisen aikana tai missä tahansa yhteyden elinkaaren vaiheessa ilmenee virheitä.

On tärkeää huomata, että onerror edeltää usein onclose-tapahtumaa tai esiintyy sen yhteydessä, mikä ilmaisee ongelmallisen yhteyden sulkeutumisen.

Asiakkaan virhe käytännössä

Tämä HTML- ja JavaScript-katkelma havainnollistaa, kuinka WebSocket-asiakkaalle määritetään onerror-käsittelijä. Kokeile suorittaa edellisen näkymän palvelin ja sen jälkeen tämä asiakas selaimessasi.

<!DOCTYPE html>
<html>
<head>
  <title>WebSocket Client Error Handling</title>
</head>
<body>
  <h1>Client Error Handler</h1>
  <p id="status">Connecting...</p>
  <script>
    const statusElement = document.getElementById('status');
    const ws = new WebSocket('ws://localhost:8080');

    ws.onopen = () => {
      statusElement.textContent = 'Connected! Try sending "cause error" from a different client.';
      console.log('WebSocket connected.');
      ws.send('Hello server!');
    };

    ws.onmessage = (event) => {
      console.log('Message from server:', event.data);
      statusElement.textContent = `Received: ${event.data}`;
    };

    ws.onerror = (error) => {
      // The error object itself might not contain detailed info
      // but it signals that an error occurred.
      statusElement.textContent = 'Error occurred! Check console.';
      console.error('WebSocket error event:', error);
    };

    ws.onclose = (event) => {
      statusElement.textContent = `Disconnected. Code: ${event.code}, Reason: ${event.reason}`;
      console.log('WebSocket disconnected:', event);
    };
  </script>
</body>
</html>

Mukautettujen virheiden välittäminen

Joskus virheet eivät liity itse yhteyteen vaan sovelluksen logiikkaan. Käyttäjä voi esimerkiksi yrittää käyttää tietoja, joihin hänellä ei ole oikeutta, tai lähettää virheellisiä syötteitä. Tällaisissa tapauksissa virheviesti on lähetettävä erikseen.

Hyvä käytäntö on jäsentää nämä tavallisiksi viesteiksi (esimerkiksi JSON-muodossa), joissa on tietty type- tai status-kenttä niiden erottamiseksi tavallisista tiedoista.

Palvelin lähettää mukautettuja virheitä

Näin palvelin voi lähettää jäsennellyn virheviestin takaisin asiakkaalle. Asiakkaan on sen jälkeen jäsennettävä ja käsiteltävä tämä viestityyppi reagoidakseen asianmukaisesti.

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8081 }); // Using a different port

wss.on('connection', function connection(ws) {
  console.log('Client connected to custom error server');

  ws.on('message', function incoming(message) {
    const msgStr = message.toString();
    if (msgStr === 'fetch_sensitive_data') {
      // Simulate an authorization error
      const errorResponse = {
        type: 'error',
        code: 403,
        message: 'Access denied: You are not authorized for this data.'
      };
      ws.send(JSON.stringify(errorResponse));
    } else {
      ws.send(`Echo: ${msgStr}`);
    }
  });

  ws.on('error', (error) => console.error('Connection error:', error.message));
  ws.on('close', () => console.log('Client disconnected from custom error server'));
});

console.log('WebSocket server for custom errors started on port 8081');
// To run this example:
// 1. npm init -y
// 2. npm install ws
// 3. node server_custom_error.js
// Then connect a client and send 'fetch_sensitive_data'

Hallittu toimintojen supistaminen

Kun tapahtuu vakava virhe, sovellus voi toimintansa täydellisen lopettamisen sijaan supistaa toimintojaan hallitusti. Tällöin käyttäjälle tarjotaan suppeampi mutta edelleen käyttökelpoinen käyttökokemus.

  • Osittainen toiminnallisuus: Poistakaa ongelmallisesta komponentista riippuvat ominaisuudet käytöstä, mutta pitäkää muut ominaisuudet toiminnassa.
  • Varamekanismit: Käyttäkää vaihtoehtoisia, mahdollisesti vähemmän reaaliaikaisia menetelmiä, kuten tietojen päivittämistä perinteisillä HTTP-pyynnöillä.
  • Tiedottakaa käyttäjälle: Kertokaa ongelmasta ja sen vaikutuksista selkeästi, jotta käyttäjien odotukset pysyvät realistisina.

Virhestrategian tarkistus

Mikä seuraavista on tehokas strategia WebSocket-sovelluksen toimintojen hallittuun supistamiseen, kun kriittinen palvelinpuolen virhe estää reaaliaikaiset päivitykset?

Virheenkäsittelyn yhteenveto

Olette oppineet, että WebSocket-sovellusten luotettava virheenkäsittely edellyttää eri virhetyyppien ymmärtämistä, sekä palvelin- että asiakaspuolen tapahtumien sieppaamista ja sovellustason virheiden välittämistä erikseen.

On erityisen tärkeää toteuttaa toimintojen hallittu supistaminen, jotta sovellus pysyy toimintavarmana ja käyttäjäystävällisenä myös ongelmatilanteissa. Harjoitelkaa näitä strategioita edelleen rakentaaksenne entistä luotettavampia reaaliaikaisia järjestelmiä!

Aloita maksutta

Opi WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
47

Usein kysytyt kysymykset

Onko oppitunti ”Vankka virheiden välitys ja palautuminen” ilmainen?

Kyllä – oppitunnin ”Vankka virheiden välitys ja palautuminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-kurssin, päivitä CoddyKit PROhon. WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Vankka virheiden välitys ja palautuminen”?

Kehitä strategioita virheenkäsittelyyn, lokitukseen ja hallittuun toimintojen rajoittamiseen WebSocket-sovelluksissa. Harjoittelet WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Vankka virheiden välitys ja palautuminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppitunnilla?

Kyllä. Jokainen WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yhteyskatkosten käsittely ja uudelleenyhdistäminen
  2. Vankka virheiden välitys ja palautuminen
  3. Sydänäänet ja yhteyden ylläpito
  4. Viestien kuittaukset ja toimitustakuut
← Takaisin: WebSockets- ja reaaliaikaisten järjestelmien ohjelmointi