Sobes.tech
Senior

Quais são as características do protocolo DDP?

sobes.tech IA

Resposta da IA

O DDP (Protocolo de Dados Distribuídos) é um protocolo utilizado no Meteor (framework para desenvolvimento web e móvel) para comunicação entre cliente e servidor.

Principais características:

  • Publicação/Assinatura: O servidor "publica" dados (coleções de documentos), e os clientes "assinam" as publicações de interesse. Quando os dados no servidor mudam, eles são enviados automaticamente a todos os clientes assinantes.
  • Em tempo real: As alterações nos dados são transmitidas instantaneamente, garantindo a atualidade da informação no cliente.
  • Chamadas remotas de procedimento (RPC): Os clientes podem chamar métodos no servidor para realizar ações específicas.
  • Idempotência das chamadas: Repetir uma chamada com os mesmos argumentos não causa efeitos colaterais indesejados (para a maioria dos métodos padrão).
  • Transporte: Normalmente usa WebSocket para uma conexão bidirecional persistente, mas pode fallback para HTTP.
  • Dados: A transmissão de dados ocorre em formato JSON.
  • Envio de dados apenas quando necessário: O servidor envia ao cliente apenas os dados aos quais está assinado, e somente quando eles mudam.
  • Operação offline: Meteor permite que os clientes salvem temporariamente alterações nos dados localmente e as sincronizem com o servidor ao restabelecer a conexão.
// Exemplo de publicação no servidor (Node.js)
Meteor.publish('myCollection', function() {
  return MyCollection.find({}); // Publica todos os documentos da coleção
});

// Exemplo de assinatura no cliente (JavaScript)
Meteor.subscribe('myCollection');
// Exemplo de chamada de método no cliente (JavaScript)
Meteor.call('addDocument', { name: 'Novo documento' }, function(error, result) {
  if (error) {
    console.error("Erro ao adicionar documento:", error);
  } else {
    console.log("Documento adicionado com sucesso:", result);
  }
});

// Exemplo de implementação do método no servidor (Node.js)
Meteor.methods({
  addDocument: function(doc) {
    // Validação e inserção do documento
    return MyCollection.insert(doc);
  }
});