Firebase-godkendelse og apps med realtidsdatabase · Lektion

Samarbejdsbaseret redigering af data

Implementer funktioner, der giver flere brugere mulighed for at redigere og se delte data i realtid ved hjælp af Firebase' synkronisering.

Lektion 3 af 411 trin

Samarbejdsbaseret redigering af data er en gratis Firebase-godkendelse og apps med realtidsdatabase-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Firebase-godkendelse og apps med realtidsdatabase, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Firebase-godkendelse og apps med realtidsdatabase-kurset indeholder 4 lektioner i alt.

Hvad er samarbejdsbaseret redigering?

Forestil dig, at flere personer arbejder på det samme dokument eller den samme delte liste på samme tid. Det er samarbejdsbaseret redigering!

  • Brugerne ser hinandens ændringer med det samme.
  • Ingen får ved et uheld overskrevet sit arbejde.
  • Alle har de seneste oplysninger.

Firebase Realtime Database er perfekt til dette, fordi den er bygget til høj hastighed og synkronisering i realtid.

Fordelen ved Firebase i realtid

Den grundlæggende styrke ved Firebase Realtime Database er muligheden for at synkronisere data på tværs af alle tilsluttede klienter på millisekunder. Det er afgørende for samarbejdsfunktioner.

  • Øjeblikkelige opdateringer: Ændringer, som én bruger foretager, sendes straks til de andre.
  • Offlineunderstøttelse: Data kan redigeres offline og synkroniseres, når forbindelsen genoprettes.
  • Skalerbarhed: Tjenesten kan håndtere mange samtidige brugere uden kompleks backend-logik.

Det gør det meget enklere at bygge chatapps, delte opgavelister eller samarbejdsbaserede whiteboards.

Strukturering af data til samarbejde

Delte data strukturerer du ofte under en fælles overordnet node. Det kan f.eks. være et chatrum eller et dokument:

  • /chatRooms/room123/messages/
  • /documents/docABC/content/
  • /sharedTasks/taskXYZ/assignees/

Hver bruger, der interagerer med disse data, lytter efter opdateringer på disse stier. Sikkerhedsregler er afgørende her, fordi de definerer, hvem der kan læse og skrive.

Lytning efter opdateringer i realtid

Klienter abonnerer på datastier og modtager automatisk opdateringer. Her er et konceptuelt kodestykke (JavaScript-lignende), der viser, hvordan en klient kan lytte efter ændringer i en delt tæller:

const db = firebase.database(); const counterRef = db.ref('sharedCounter'); counterRef.on('value', (snapshot) => { const currentCount = snapshot.val(); console.log('Current count:', currentCount); });

Alle ændringer i /sharedCounter fra enhver klient udløser denne lytter med det samme.

const db = firebase.database();
const counterRef = db.ref('sharedCounter');

counterRef.on('value', (snapshot) => {
  const currentCount = snapshot.val();
  console.log('Current count:', currentCount);
});

Udfordringen: samtidige skrivninger

Hvad sker der, hvis to brugere forsøger at opdatere det samme stykke data på præcis samme tidspunkt? Det kaldes en race condition.

Forestil dig en delt tæller. Bruger A læser 10, lægger 1 til og skriver 11. På *samme tid* læser bruger B 10, lægger 1 til og skriver 11. Tælleren burde være 12, men ender som 11, fordi den ene opdatering overskriver den anden.

Simulering af en race condition

Denne Java-kode simulerer to tråde, der forsøger at øge en delt tæller uden korrekt synkronisering. Kør den flere gange, og se det endelige antal – det er måske ikke altid 2000!

public class Main {
  private static int counter = 0;

  public static void main(String[] args) throws InterruptedException {
    Thread t1 = new Thread(() -> {
      for (int i = 0; i < 1000; i++) {
        counter++;
      }
    });

    Thread t2 = new Thread(() -> {
      for (int i = 0; i < 1000; i++) {
        counter++;
      }
    });

    t1.start();
    t2.start();

    t1.join();
    t2.join();

    System.out.println("Final Counter: " + counter);
  }
}

Løsning med Firebase-transaktioner

Firebase Realtime Database tilbyder transaktioner for at forhindre disse race conditions. En transaktion sikrer, at en opdateringshandling er atomisk – den gennemføres enten helt eller mislykkes, og ingen andre skrivninger forstyrrer den undervejs.

Det fungerer sådan:

  1. De aktuelle data læses.
  2. Dine ændringer anvendes på disse data.
  3. De nye data skrives tilbage, men KUN hvis de oprindelige data ikke er blevet ændret, siden du læste dem.

Hvis dataene er blevet ændret, prøver transaktionen igen.

Implementering af en transaktion

Her er en konceptuel transaktion, der øger en delt tæller sikkert (JavaScript-lignende). Metoden runTransaction modtager en opdateringsfunktion.

const db = firebase.database(); const counterRef = db.ref('sharedCounter'); counterRef.transaction((currentData) => { // If data doesn't exist, start at 0 if (currentData === null) { return 1; } // Increment the existing value return currentData + 1; }).then((result) => { if (result.committed) { console.log('Counter incremented successfully!'); } else { console.log('Transaction aborted or failed.'); } }).catch((error) => { console.error('Transaction error:', error); });

Det garanterer, at tælleren øges korrekt, selv når mange brugere foretager ændringer samtidig.

const db = firebase.database();
const counterRef = db.ref('sharedCounter');

counterRef.transaction((currentData) => {
  // If data doesn't exist, start at 0
  if (currentData === null) {
    return 1;
  }
  // Increment the existing value
  return currentData + 1;
}).then((result) => {
  if (result.committed) {
    console.log('Counter incremented successfully!');
  } else {
    console.log('Transaction aborted or failed.');
  }
}).catch((error) => {
  console.error('Transaction error:', error);
});

Forklaring af transaktionslogik

Kernen i en transaktion er opdateringsfunktionen: (currentData) => { ... }.

  • currentData: Dette er værdien af dataene på serveren i det øjeblik, transaktionen forsøger at gennemføre skrivningen.
  • Returværdi: Det, din funktion returnerer, er den nye værdi, som Firebase forsøger at skrive.
  • Returnering af undefined eller null: Hvis du returnerer undefined eller null, afbrydes transaktionen, og ingen ændringer skrives.

Firebase håndterer logikken for at prøve igen, hvis currentData ændres mellem din læsning og forsøget på at gennemføre skrivningen.

Hurtigt tjek af transaktioner

Du bygger en app til samarbejdsbaseret tegning. Brugere kan føje en ny streg til et delt lærred. Hvilken Firebase-funktion er vigtigst for at sikre, at to brugere, der tegner på præcis samme tid, ikke overskriver hinandens ændringer på listen over streger?

Opsummering: samarbejdsbaseret redigering

I denne lektion undersøgte vi, hvordan Firebase Realtime Database driver applikationer til samarbejdsbaseret redigering. Vi lærte:

  • Firebases synkronisering i realtid er ideel til fælles oplevelser.
  • Det er afgørende at strukturere data korrekt for at give adgang til delte data.
  • Der kan opstå kapløbstilstande ved samtidige skrivninger.
  • Firebase Transactions er løsningen til sikkert at opdatere delte data, så integriteten bevares, selv når mange brugere er aktive.

Ved at bruge transaktioner kan du bygge robuste samarbejdsfunktioner, hvor brugerne kan arbejde problemfrit sammen.

Gratis at komme i gang

Lær Firebase-godkendelse og apps med realtidsdatabase med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
11
Lektioner
44

Ofte stillede spørgsmål

Er lektionen “Samarbejdsbaseret redigering af data” gratis?

Ja — alle 3 lektioner i læringssporet Firebase-godkendelse og apps med realtidsdatabase, inklusive “Samarbejdsbaseret redigering af data”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Firebase-godkendelse og apps med realtidsdatabase-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Samarbejdsbaseret redigering af data”?

Implementer funktioner, der giver flere brugere mulighed for at redigere og se delte data i realtid ved hjælp af Firebase' synkronisering. Du øver dig i Firebase-godkendelse og apps med realtidsdatabase med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Firebase-godkendelse og apps med realtidsdatabase?

Der kræves ingen tidligere erfaring. Firebase-godkendelse og apps med realtidsdatabase på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Samarbejdsbaseret redigering af data”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Firebase-godkendelse og apps med realtidsdatabase-lektion?

Ja. Alle Firebase-godkendelse og apps med realtidsdatabase-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Forbindelse af brugerdata med Auth
  2. Brugerprofiler i realtid
  3. Samarbejdsbaseret redigering af data
  4. Rollebaseret adgang til brugerdata
← Tilbage til Firebase-godkendelse og apps med realtidsdatabase