Sobes.tech
Senior

Mik a DDP protokoll jellemzői?

sobes.tech MI

Válasz az MI-től

A DDP (Distributed Data Protocol) egy protokoll, amit a Meteor (web- és mobilfejlesztéshez használt keretrendszer) használ az ügyfél és a szerver közötti kommunikációhoz.

Fő jellemzők:

  • Közzététel/Előfizetés: A szerver "közzétesz" adatokat (dokumentumgyűjteményeket), és a kliensek "feliratkoznak" az érdeklődésüknek megfelelő közzétételekre. Amikor a szerveren adatok változnak, azokat automatikusan küldi minden előfizetett kliensnek.
  • Valós idejű: Az adatmódosításokat azonnal továbbítja, biztosítva az információk aktuális állapotát a kliensen.
  • Távoli eljáráshívások (RPC): A kliensek módszereket hívhatnak a szerveren, hogy bizonyos műveleteket hajtsanak végre.
  • Idempotens hívások: Ugyanazzal az argumentummal ismételt hívások nem okoznak nem kívánt mellékhatásokat (a legtöbb szabványos módszer esetén).
  • Szállítás: Általában WebSocket-et használnak a folyamatos kétirányú kapcsolat fenntartására, de fallback-elhet HTTP-re.
  • Adatok: Az adatok JSON formátumban kerülnek továbbításra.
  • Csak szükség esetén küld adatokat: A szerver csak azokat az adatokat küldi a kliensnek, amelyekre feliratkozott, és csak akkor, ha azok megváltoznak.
  • Offline működés: A Meteor lehetővé teszi, hogy a kliensek ideiglenesen helyben tárolják az adatokat, és szinkronizálják azokat a szerverrel a kapcsolat helyreállásakor.
// Példa publikálásra a szerveren (Node.js)
Meteor.publish('myCollection', function() {
  return MyCollection.find({}); // Minden dokumentum publikálása a gyűjteményből
});

// Példa feliratkozásra a kliensen (JavaScript)
Meteor.subscribe('myCollection');
// Példa módszerhívásra a kliensen (JavaScript)
Meteor.call('addDocument', { name: 'Új dokumentum' }, function(error, result) {
  if (error) {
    console.error("Hiba a dokumentum hozzáadásakor:", error);
  } else {
    console.log("Dokumentum sikeresen hozzáadva:", result);
  }
});

// Példa módszer implementálására a szerveren (Node.js)
Meteor.methods({
  addDocument: function(doc) {
    // Validálás és beszúrás
    return MyCollection.insert(doc);
  }
});