node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > NodeJS GRPC .proto 文件

NodeJS GRPC 多个 .proto 文件的处理步骤

作者:田猿笔记

本文教程详细介绍了在NodeJS环境中如何使用gRPC框架处理多个.proto文件,步骤包括安装依赖、定义.proto文件、生成gRPC代码、实现服务器和客户端以及运行,适用于开发者在构建分布式应用时进行接口定义和服务实现

1. 安装依赖

首先,确保你已经安装了 grpc-toolsgrpc_tools_node_protoc_ts

npm install grpc-tools grpc_tools_node_protoc_ts --save-dev

2. 定义 .proto 文件

假设我们有两个 .proto 文件:service_a.protoservice_b.proto

service_a.proto

syntax = "proto3";
package myproject;
service ServiceA {
  rpc Method1 (Request1) returns (Response1) {}
  rpc Method2 (Request2) returns (Response2) {}
}
message Request1 { string name = 1; }
message Response1 { string message = 1; }
message Request2 { string name = 1; }
message Response2 { string message = 1; }

service_b.proto

syntax = "proto3";
package myproject;
service ServiceB {
  rpc Method3 (Request3) returns (Response3) {}
  rpc Method4 (Request4) returns (Response4) {}
}
message Request3 { string name = 1; }
message Response3 { string message = 1; }
message Request4 { string name = 1; }
message Response4 { string message = 1; }

3. 生成 gRPC 代码

使用 npx grpc_tools_node_protoc 生成 gRPC 代码,并指定输出目录:

npx grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./generated --grpc_out=grpc_js:./generated --proto_path=. service_a.proto
npx grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./generated --grpc_out=grpc_js:./generated --proto_path=. service_b.proto

生成文件解释

运行上述命令后,将在 ./generated 目录中生成以下文件:

service_a_pb.jsservice_b_pb.js

4. 实现服务器

创建 server.js 文件,包含服务的实现:

const grpc = require('@grpc/grpc-js');
const serviceAProto = require('./generated/service_a_grpc_pb');
const serviceAMessages = require('./generated/service_a_pb');
const serviceBProto = require('./generated/service_b_grpc_pb');
const serviceBMessages = require('./generated/service_b_pb');
function method1(call, callback) {
  const reply = new serviceAMessages.Response1();
  reply.setMessage('Response from Method1: ' + call.request.getName());
  callback(null, reply);
}
function method2(call, callback) {
  const reply = new serviceAMessages.Response2();
  reply.setMessage('Response from Method2: ' + call.request.getName());
  callback(null, reply);
}
function method3(call, callback) {
  const reply = new serviceBMessages.Response3();
  reply.setMessage('Response from Method3: ' + call.request.getName());
  callback(null, reply);
}
function method4(call, callback) {
  const reply = new serviceBMessages.Response4();
  reply.setMessage('Response from Method4: ' + call.request.getName());
  callback(null, reply);
}
function main() {
  const server = new grpc.Server();
  server.addService(serviceAProto.ServiceAService, { method1: method1, method2: method2 });
  server.addService(serviceBProto.ServiceBService, { method3: method3, method4: method4 });
  server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
    server.start();
  });
}
main();

5. 实现客户端

创建 client.js 文件,包含客户端的实现:

const grpc = require('@grpc/grpc-js');
const serviceAProto = require('./generated/service_a_grpc_pb');
const serviceAMessages = require('./generated/service_a_pb');
const serviceBProto = require('./generated/service_b_grpc_pb');
const serviceBMessages = require('./generated/service_b_pb');
function main() {
  const clientA = new serviceAProto.ServiceAClient('localhost:50051', grpc.credentials.createInsecure());
  const clientB = new serviceBProto.ServiceBClient('localhost:50051', grpc.credentials.createInsecure());
  const request1 = new serviceAMessages.Request1();
  request1.setName('World');
  clientA.method1(request1, (err, response) => {
    if (err) console.error(err);
    else console.log('Response from Method1:', response.getMessage());
  });
  const request3 = new serviceBMessages.Request3();
  request3.setName('World');
  clientB.method3(request3, (err, response) => {
    if (err) console.error(err);
    else console.log('Response from Method3:', response.getMessage());
  });
}
main();

6. 运行服务器和客户端

确保你已经安装了所有必要的依赖:

npm install @grpc/grpc-js

然后,分别运行服务器和客户端:

node server.js
node client.js

到此这篇关于NodeJS GRPC 多个 .proto 文件的文章就介绍到这了,更多相关NodeJS GRPC .proto 文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文