码迷,mamicode.com
首页 > 其他好文 > 详细

gRPC

时间:2019-10-17 23:29:20      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:syntax   bin   protoc   toc   div   evel   ack   hub   esc   

Nodejs 版本

Github地址:https://github.com/changbaihe/GrpcDemo

一、编写pb文件(.proto),例:chat.proto

  注:1.protocol buffers 维基百科:https://zh.wikipedia.org/wiki/Protocol_Buffers

    2.protocol buffers 语法详见:https://developers.google.com/protocol-buffers

syntax = "proto3";  // 使用proto3语法,因为从3.0.0 Beta2版,开始支持JavaScript

package grpcTest;   // 定义包名
// 定义服务名
service chat {
  // 定义远程调用方法
  rpc getMessage(HelloRequest) returns (HelloResponse) {}
  rpc getAge(HelloRequest) returns (HelloResponse) {}
}

// 定义消息类型
message HelloRequest{
  int32 id = 1;
  string name = 2;
  int32 age = 3;
  string year = 4;
}

// 定义消息类型
message HelloResponse{
  string reply = 1;
}

二、demo代码:index.js

const path = require(‘path‘);
const grpc = require(‘grpc‘);

const PROTO_PATH = path.join(__dirname,‘./chat.proto‘);
const protoLoader = require(‘@grpc/proto-loader‘);
const packageDefinition = protoLoader.loadSync(
  PROTO_PATH,
  {
    keepCase: true,
    longs: String,
    enums: String,
    defaults: true,
    oneofs: true
  }
);
const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
const packageObj = protoDescriptor.grpcTest;

// 服务端
const server = new grpc.Server();
server.addService(
  packageObj.chat.service,
  {
    getMessage: (call, callback) => callback(null, {reply: `hello, ${call.request.name}`}),
    getAge: (call, callback) => callback(null, {reply: `${call.request.name} age is ${call.request.age} year old.`}),
  }
);
server.bind(‘0.0.0.0:8080‘, grpc.ServerCredentials.createInsecure());
server.start();
console.log(‘servering……‘);


// 客户端
const client = new packageObj.chat(
  ‘localhost:8080‘,
  grpc.credentials.createInsecure()
);

setTimeout(() => {
  const req = { id: 1, name: ‘cbh‘, age: 23, year: ‘1996‘ }
  client.getMessage(req, (err, data) => {
    if (err) {
      return console.error(err);
    }
    console.log(data.reply);
  });

  client.getAge(req, (err, data) => {
    if (err) {
      return console.error(err);
    }
    console.log(data.reply);
  });
}, 1000);

  

gRPC

标签:syntax   bin   protoc   toc   div   evel   ack   hub   esc   

原文地址:https://www.cnblogs.com/changbaihe/p/11695678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!