npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ugrpc

v1.5.1

Published

gRPC for microservice communications

Downloads

916

Readme

ugrpc

gRPC for microservice communications

This package offers a concise method for establishing both gRPC server and client.

Examples

syntax = "proto3";

package calculator;

service Calculator{
  rpc Sum (SumRequest) returns (SumResponse);
}

message SumRequest {
  int32 first_number = 1;
  int32 second_number = 2;
}

message SumResponse {
  int32 result = 1;
}

Server

const { Server } = require('ugrpc');

const server = new Server({
  proto: {
    packageName: 'calculator',
    serviceName: 'Calculator',
    protoPath: path.join(__dirname, '../proto/calculator.proto'),
  },

  // run the server on port 3000
  host: '0.0.0.0:3000',

  // init healthcheck status
  // the following configuration will provide `SERVING` health check status for service `calc`
  name: 'calc',
  healthcheckStatus: {},

  // implementations of the methods
  controllers: {
    sum: async () => { ... }
  },
});

// start the gRPC server
server.startServer();

// stop the server
server.stopServer();

Configuring proto-loader options

This package utilizes proto-loader for loading the proto file. You can specify proto-loader options as follows:

const server = new Server({
  // ...other configs

  // these are the default options
  protoLoaderOptions: {
    keepCase: false,
    longs: String,
    enums: String,
    defaults: false,
    oneofs: true,
    arrays: true,
  }
});

Additional configurations for health check status examples

Suppose your server's health depends on two other services: mysql server and foo service. Initialize your service health check with:

const server = new Server({
  // ...other configs
  name: 'calc',
  healthcheckStatus: {
    mysql: true,
    foo: true
  }
});

In the event of a connection error to the MySQL server, update your service's health status to unhealthy:

server.updateHealthCheckStatus({mysql: false})

Bypass the Health Check

By default, if you don't define the property healthcheckStatus, the service is always considered healthy.

const server = new Server({{
  // ...other configs
  name: 'calc',
});

The gRPC health check status will be:

{
  '': servingStatus.SERVING,
  'calc': servingStatus.SERVING
}

If you leave the service name undefined, the health check status will be:

{
  '': servingStatus.SERVING,
}

Client

const { Client } = require('ugrpc');

const client = Client.createGrpcClient({
  host: 'calculator.svc:3000',
  proto: {
    packageName: 'calculator',
    serviceName: 'Calculator',
    protoPath: path.join(__dirname, '../proto/calculator.proto'),
  },
});

// create call options: deadline in 30s
const options = Client.createCallOptions(30000);

// send grpc request
client.sum({ firstNumber: 1, secondNumber: 2 }, options, (err, data) => {
  if (err) {
    console.error('sum ERROR', err)
  } else {
    console.log('sum RESULT', data.result)
  }
})

Configuring proto-loader Options

You can also specify proto-loader options as follows:

const client = Client.createGrpcClient({
  // ...other configs
  protoLoaderOptions: {
    keepCase: false,
    longs: String,
    enums: String,
    defaults: false,
    oneofs: true,
    arrays: true,
  }
});