当前位置: 代码网 > it编程>编程语言>Javascript > NodeJS GRPC 多个 .proto 文件的处理步骤

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

2024年11月03日 Javascript 我要评论
1. 安装依赖首先,确保你已经安装了 grpc-tools 和 grpc_tools_node_protoc_ts:npm install grpc-tools grpc_tools_node_pro

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

  • 包含 protocol buffers 消息的定义和序列化/反序列化逻辑。
  • 定义了 .proto 文件中声明的消息类型,并提供了相应的 getter 和 setter 方法。
  • service_a_grpc_pb.jsservice_b_grpc_pb.js
  • 包含 grpc 服务的客户端和服务器端的接口定义。
  • 定义了服务的方法,并提供了用于调用这些方法的客户端和服务器端的代码。

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 文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com