Giter Site home page Giter Site logo

grpc_nodejs's Introduction

GRPC em Node

Protocol Buffers (também conhecido como protobuf) é um método de serialização de dados estruturados. É útil no desenvolvimento de programas que se comunicam uns com os outros ou para armazenar dados. O método envolve uma linguagem de descrição de interface que descreve a estrutura de dados e um programa que gera código-fonte a partir dessa descrição para a geração ou a análise de um fluxo de bytes que representa os dados estruturados.

As metas do design de Protocol Buffers enfatizaram a simplicidade e desempenho. Em particular, ele foi projetado para ser menor e mais rápido do que XML.

Protocol Buffers são amplamente utilizados pelo Google para o armazenamento e intercâmbio de vários tipos de informações estruturadas. O método serve como base para uma chamada de procedimento remoto (RPC) personalizada do sistema que é usado por quase todas as comunicações inter-máquina do Google.

Um desenvolvedor de software define estruturas de dados (chamadas de mensagens) e serviços em um arquivo de definição proto (.proto) e os compila com um programa chamado protoc. Esta compilação gera código que pode ser invocado por um remetente ou destinatário destas estruturas de dados. Por exemplo, exemplo.proto vai produzir exemplo.pb.cc e exemplo.pb.h, que irão implementar classes de C++ para cada mensagem definida em exemplo.proto.

Canonicamente, as mensagens são serializadas em um protocolo binário compacto, com compatibilidade reversa e direta, mas não são auto-descritivas (isto é, não há nenhuma maneira de saber os nomes, significados, ou tipos de dados dos campos de uma mensagem sem uma especificação externa). Não há nenhuma forma predefinida de incluir ou referir-se a essa especificação externa (esquema) dentro de um arquivo de Protocol Buffers. Implementações oficialmente suportadas incluem um formato de serialização em ASCII, mas este formato, embora auto-descritivo, perde o compatibilidade de comportamento reversa e direta, e não é, portanto, uma boa escolha para aplicações e deve ser usada somente para depuração.

Instalação

Instale protobuf no ubuntu

    sudo snap install protobuf
    sudo apt install protobuf-compiler

Para gerar o arquivo protobuf entre na raiz do projeto e execute o comando abaixo.

    protoc --js_out=import_style=commonjs,binary:. proto/notes.proto

Isso vai fazer com que seja gerado o arquivo notes_pb.js

Uso/Exemplos

Start o servidor para processamentos das request gRpc

Na raiz do projeto abra 2 terminais:

  • Terminal 01

    • Start
    node src/server.js
    • Response
    (node:172257) DeprecationWarning: grpc.load: Use the @grpc/proto-loader module with grpc.loadPackageDefinition instead
    (Use `node --trace-deprecation ...` to show where the warning was created)
  • Terminal 02

    • Start
    node src/client.js
    • Response
    (node:172285) DeprecationWarning: grpc.load: Use the @grpc/proto-loader module with grpc.loadPackageDefinition instead
    (Use `node --trace-deprecation ...` to show where the warning was created)
    
    # Abaixo devolutiva do Add
    { id: '3', title: 'Note 3', description: 'Content 3' }
    
    # Abaixo devolutiva do Find
    { id: '1', title: 'Note 1', description: 'Content 1' }
    
    # Abaixo devolutiva do List
    {
        notes: [
            { id: '1', title: 'Note 1', description: 'Content 1' },
            { id: '2', title: 'Note 2', description: 'Content 2' },
            { id: '3', title: 'Note 3', description: 'Content 3' }
        ]
    }

    obs: Devolutivas dependem do tempo de processamento da promise, por isso list e a ultima mesmo sendo executada primeiro

Para ver o processo do proto funcionando de modo simples rode o comando abaixo:

  • Terminal 01

    • Start
    node proto/note.js
    • Response
    ---------------------------------------------
    ~ note {
    wrappers_: null,
    messageId_: undefined,
    arrayIndexOffset_: -1,
    array: [ 'id-123', 'title', 'description' ],
    pivot_: 1.7976931348623157e+308,
    convertedPrimitiveFields_: {}
    }
    ---------------------------------------------
    ~ serializedNote Uint8Array(28) [
    10,   6, 105, 100,  45,  49,  50,
    51,  18,   5, 116, 105, 116, 108,
    101,  26,  11, 100, 101, 115,  99,
    114, 105, 112, 116, 105, 111, 110
    ]
    ---------------------------------------------
    ~ deserialized {
    wrappers_: null,
    messageId_: undefined,
    arrayIndexOffset_: -1,
    array: [ 'id-123', 'title', 'description' ],
    pivot_: 1.7976931348623157e+308,
    convertedPrimitiveFields_: {}
    }
    ---------------------------------------------

Referência

grpc_nodejs's People

Contributors

braullio avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.