欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NodeJS?GRPC?多個?.proto?文件的處理步驟

 更新時間:2024年10月16日 10:04:53   作者:田猿筆記  
本文教程詳細(xì)介紹了在NodeJS環(huán)境中如何使用gRPC框架處理多個.proto文件,步驟包括安裝依賴、定義.proto文件、生成gRPC代碼、實現(xiàn)服務(wù)器和客戶端以及運行,適用于開發(fā)者在構(gòu)建分布式應(yīng)用時進行接口定義和服務(wù)實現(xiàn)

1. 安裝依賴

首先,確保你已經(jīng)安裝了 grpc-toolsgrpc_tools_node_protoc_ts

npm install grpc-tools grpc_tools_node_protoc_ts --save-dev

2. 定義 .proto 文件

假設(shè)我們有兩個 .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 文件中聲明的消息類型,并提供了相應(yīng)的 getter 和 setter 方法。
  • service_a_grpc_pb.jsservice_b_grpc_pb.js
  • 包含 gRPC 服務(wù)的客戶端和服務(wù)器端的接口定義。
  • 定義了服務(wù)的方法,并提供了用于調(diào)用這些方法的客戶端和服務(wù)器端的代碼。

4. 實現(xiàn)服務(wù)器

創(chuàng)建 server.js 文件,包含服務(wù)的實現(xiàn):

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. 實現(xiàn)客戶端

創(chuàng)建 client.js 文件,包含客戶端的實現(xiàn):

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. 運行服務(wù)器和客戶端

確保你已經(jīng)安裝了所有必要的依賴:

npm install @grpc/grpc-js

然后,分別運行服務(wù)器和客戶端:

node server.js
node client.js

到此這篇關(guān)于NodeJS GRPC 多個 .proto 文件的文章就介紹到這了,更多相關(guān)NodeJS GRPC .proto 文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Node.js Express安裝與使用教程

    Node.js Express安裝與使用教程

    Express 是一個簡潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強大特性幫助你創(chuàng)建各種 Web 應(yīng)用,這篇文章主要介紹了Node.js Express安裝與使用教程,非常具有實用價值,需要的朋友可以參考下
    2018-05-05
  • 最流行的Node.js精簡型和全棧型開發(fā)框架介紹

    最流行的Node.js精簡型和全棧型開發(fā)框架介紹

    這篇文章主要介紹了最流行的Node.js精簡型和全棧型開發(fā)框架介紹,本文講解了Express.js、KOA、Total.js、Sails.js、Meteor、Mean.IO等框架,需要的朋友可以參考下
    2015-02-02
  • nvm mac 環(huán)境搭建過程

    nvm mac 環(huán)境搭建過程

    這篇文章主要為大家介紹了nvm mac 環(huán)境搭建過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 解決Mac下安裝nmp的淘寶鏡像失敗問題

    解決Mac下安裝nmp的淘寶鏡像失敗問題

    今天小編就為大家分享一篇解決Mac下安裝nmp的淘寶鏡像失敗問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • npm install常見錯誤類型及對應(yīng)的解決方案

    npm install常見錯誤類型及對應(yīng)的解決方案

    在前端開發(fā)中,npm是最常用的包管理工具,通過 npm install 命令,開發(fā)者可以輕松地安裝項目所需的依賴包,然而,在實際使用過程中,npm install 可能會因為各種原因而報錯,本文將詳細(xì)介紹一些常見的 npm install 錯誤類型、發(fā)生原因及其對應(yīng)的解決方案,需要的朋友可以參考下
    2025-03-03
  • 淺析 NodeJs 的幾種文件路徑

    淺析 NodeJs 的幾種文件路徑

    本篇文章主要介紹了淺析 NodeJs 的幾種文件路徑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 如何解決安裝websocket還是報錯Cannot find module'ws'問題

    如何解決安裝websocket還是報錯Cannot find module'ws&apos

    這篇文章主要介紹了如何解決安裝websocket還是報Cannot find module'ws'問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用Node.js配合Nginx實現(xiàn)高負(fù)載網(wǎng)絡(luò)

    使用Node.js配合Nginx實現(xiàn)高負(fù)載網(wǎng)絡(luò)

    這篇文章主要介紹了使用Node.js配合Nginx實現(xiàn)高負(fù)載網(wǎng)絡(luò),Node的異步加上Nginx的反向代理在性能上實在是給力!需要的朋友可以參考下
    2015-06-06
  • Node.js使用Playwright自動化測試頁面性能

    Node.js使用Playwright自動化測試頁面性能

    對于現(xiàn)在的網(wǎng)站而言,性能的重要性不言而喻,本文將使用Playwright自動化測試頁面性能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Node.js實現(xiàn)一個HTTP服務(wù)器的方法示例

    Node.js實現(xiàn)一個HTTP服務(wù)器的方法示例

    這篇文章主要介紹了Node.js實現(xiàn)一個HTTP服務(wù)器的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論