Nodejs 版本javascript
Github地址:https://github.com/changbaihe/GrpcDemojava
1、編寫pb文件(.proto),例:chat.protogit
注:1.protocol buffers 維基百科:https://zh.wikipedia.org/wiki/Protocol_Buffersgithub
2.protocol buffers 語法詳見:https://developers.google.com/protocol-buffersui
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; }
2、demo代碼:index.jsgoogle
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);