gRPC( Remote Procedure Call by Google)
服务端 proto 手写,可以自动生成需要实现的代码:https://medium.com/blokur/how-to-implement-a-grpc-client-and-server-in-typescript-fa3ac807855e
proto 文件定义服务以及消息类型:
syntax = "proto3"; 
...
package helloworld;
// The greeting service definition.
service Greeter {
  // Sends a greeting // 提供|开放 sayHello 接口 // 接口逻辑写在服务中
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}
// The response message containing the greetings
message HelloReply {
  string message = 1;
}
开启服务器:
var PROTO_PATH = __dirname + '/../../protos/helloworld.proto';
var hello_proto = grpc.load(PROTO_PATH).helloworld;
/**
 * Implements the SayHello RPC method.
 */
function sayHello(call, callback) {
  callback(null, {message: 'Hello ' + call.request.name});
}
/**
 * Starts an RPC server that receives requests for the Greeter service at the
 * sample server port
 */
  var server = new grpc.Server();
  server.addProtoService(hello_proto.Greeter.service, {sayHello: sayHello}); // 这里定义了接口还要在proto文件中rpc提供
  server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
  server.start();
开启客户端:
// load proto
...
  var client = new hello_proto.Greeter('localhost:50051', grpc.credentials.createInsecure());
  client.sayHello({name:  'world'}, function(err, response) {
    console.log('Greeting:', response.message);
  });