grpc-pack
Simpler use of grpc in Node.js
Last updated 5 months ago by eksa .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install grpc-pack 
SYNC missed versions from official npm registry.

gRPC Pack

Version License Forks Stars Watchers

Simpler use of grpc in Node.js.

Install

$ npm install grpc-pack or yarn add grpc-pack

Usage

Single Proto

  • Model and Service

    syntax = "proto3";
    
    package service;
    
    service Greeter {
      rpc Hello (Name) returns (Message) {}
    }
    
    message Name {
      string name = 1;
    }
    
    message Message {
      string message = 1;
    }
    

Server

const { createServer } = require('grpc-pack');
const server = createServer();

server.use({
  protoPath: 'path/to/directory_proto',
  protoName: 'greeter.proto',
  serviceName: 'Greeter',
  routes: {
    hello: (call, callback) => {
      callback(null, { message: `Hello, ${call.request.name}` });
    },
  },
});

server.listen('0.0.0.0:6969');

Client

const { createClient } = require('grpc-pack');
const client = createClient(
  {
    protoPath: 'path/to/directory_proto',
    protoName: 'greeter.proto',
    serviceName: 'Greeter',
  },
  '0.0.0.0:6969'
);

client.hello({ name: 'Seorang Eksa' }, (err, { message }) => {
  if(err) throw err;
  console.log(message);
});

Separate Proto Model and Service

  • Service

    syntax="proto3";
    
    package service;
    
    option go_package = "github.com/zoobc/zoobc-core/common/service";
    
    import "model/block.proto";
    import "google/api/annotations.proto";
    
    // BlockService represent request on Blockchain's Block
    service BlockService {
        rpc GetBlocks(model.GetBlocksRequest) returns (model.GetBlocksResponse) {
            option (google.api.http) = {
                get: "/v1/block/GetBlocks"
            };
        }
    }
    
  • Model

    // Block represent the block data structure stored in the database
    message Block {
      int64 ID = 1 [ jstype = JS_STRING ];
      uint32 Height = 2;
      string CumulativeDifficulty = 3;
      int64 TotalCoinBase = 4 [ jstype = JS_STRING ];
      uint32 Version = 5;
    }
    
    // BlockExtendedInfo represent the Block data plus part of block data not to be persisted to database
    message BlockExtendedInfo {
      Block Block = 1;
    }
    
    // GetBlocksRequest create request to get a list block
    message GetBlocksRequest {
      // Fetch block from `n` height
      uint32 Height = 1;
    }
    
    message GetBlocksResponse {
      // Number of block returned
      uint32 Count = 1;
      // Blocks height returned from
      uint32 Height = 2;
      // Blocks returned
      repeated Block Blocks = 3;
    }
    

Server

const { createServer } = require('grpc-pack');
const server = createServer();
const mockup = [
  {
    ID: '1',
    Height: 1,
    CumulativeDifficulty: 'Test 1',
    TotalCoinBase: 10000,
    Version: 1,
  },
  {
    ID: '2',
    Height: 2,
    CumulativeDifficulty: 'Test 2',
    TotalCoinBase: 20000,
    Version: 1,
  },
  {
    ID: '3',
    Height: 2,
    CumulativeDifficulty: 'Test 3',
    TotalCoinBase: 30000,
    Version: 1,
  },
];

server.use({
  protoPath: 'path/to/directory_proto',
  protoName: 'block.proto',
  servicePath: 'service',
  serviceName: 'BlockService',
  routes: {
    GetBlocks: (call, callback) => {
      const Height = call.request.Height;
      const Blocks = Height > 0 ? mockup.filter(f => f.Height === Height) : mockup;
      const Count = Blocks.length;
      const GetBlocksResponse = {
        Count,
        Height,
        Blocks,
      };
      callback(null, GetBlocksResponse);
    },
  },
});

server.listen('0.0.0.0:6969');

Client

const { createClient } = require('grpc-pack');
const client = createClient(
  {
    protoPath: 'path/to/directory_proto',
    protoName: 'block.proto',
    servicePath: 'service',
    serviceName: 'BlockService',
  },
  '0.0.0.0:6969'
);

const params = { Height: 1 };
client.GetBlocks(params, (err, res) => {
  if(err) throw err;
  console.log(res);
});

License

This project is licensed under the MIT License - see the LICENSE file for details

Current Tags

  • 0.2.3                                ...           latest (5 months ago)

6 Versions

  • 0.2.3                                ...           5 months ago
  • 0.2.2                                ...           8 months ago
  • 0.1.2                                ...           a year ago
  • 0.1.1                                ...           a year ago
  • 0.1.0                                ...           a year ago
  • 0.0.1                                ...           a year ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 4
Last Day 0
Last Week 4
Last Month 6
Dependencies (2)
Dev Dependencies (2)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |