最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1. 安裝依賴

首先,確保你已經(jīng)安裝了 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 服務的客戶端和服務器端的接口定義。
  • 定義了服務的方法,并提供了用于調(diào)用這些方法的客戶端和服務器端的代碼。

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

創(chuàng)建 server.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 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. 運行服務器和客戶端

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

npm install @grpc/grpc-js

然后,分別運行服務器和客戶端:

node server.js
node client.js

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

相關文章

  • node.js中的buffer.Buffer.isEncoding方法使用說明

    node.js中的buffer.Buffer.isEncoding方法使用說明

    這篇文章主要介紹了node.js中的buffer.Buffer.isEncoding方法使用說明,本文介紹了buffer.Buffer.isEncoding的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 詳解利用 Express 托管靜態(tài)文件的方法

    詳解利用 Express 托管靜態(tài)文件的方法

    本篇文章主要介紹了詳解利用 Express 托管靜態(tài)文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • pnpm的安裝及其使用教程(匯總)

    pnpm的安裝及其使用教程(匯總)

    pnpm是 Node.js 的替代包管理器,它是 npm 的直接替代品,速度更快、效率更高,它由 npm/yarn 衍生而來,但卻解決了 npm/yarn 內(nèi)部潛在的 bug,并且極大了地優(yōu)化了性能,本文給大家介紹pnpm的安裝及其使用,感興趣的朋友一起看看吧
    2023-12-12
  • Node.js通過配置?strict-ssl=false解決npm安裝卡住問題

    Node.js通過配置?strict-ssl=false解決npm安裝卡住問題

    使用npm安裝依賴包是常見的任務之一,有時會遇到安裝卡住的問題,本文就來介紹一下通過配置?strict-ssl=false解決npm安裝卡住問題,感興趣的可以了解一下
    2024-12-12
  • Node.js(安裝,啟動,測試)

    Node.js(安裝,啟動,測試)

    這里主要介紹基于windows平臺上最簡單方便的安裝方式,啟動以及簡單測試
    2014-06-06
  • 詳解Node.js包的工程目錄與NPM包管理器的使用

    詳解Node.js包的工程目錄與NPM包管理器的使用

    這篇文章主要介紹了Node.js包的工程目錄與NPM包管理器的使用,可以幫助編程者更好地組織Node.js代碼文件,需要的朋友可以參考下
    2016-02-02
  • 使用Node.js實現(xiàn)一個簡單的命令行工具

    使用Node.js實現(xiàn)一個簡單的命令行工具

    這篇文章主要為大家詳細介紹了如何用 Node.js 實現(xiàn)一個簡單的命令行工具,模仿常用的 ls 命令,包括其 -a 和 -l 參數(shù)的功能,感興趣的可以了解下
    2024-11-11
  • nodejs使用express獲取get和post傳值及session驗證的方法

    nodejs使用express獲取get和post傳值及session驗證的方法

    這篇文章主要介紹了nodejs使用express獲取get和post傳值及session驗證的方法,結合實例形式分析了nodejs使用express實現(xiàn)獲取get和post傳值及session驗證功能的具體操作步驟與注意事項,需要的朋友可以參考下
    2017-11-11
  • node封裝一個控制臺進度條插件???????詳情

    node封裝一個控制臺進度條插件???????詳情

    這篇文章主要介紹了node封裝一個控制臺進度條插件???????詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • node.js中fs.stat與fs.fstat的區(qū)別詳解

    node.js中fs.stat與fs.fstat的區(qū)別詳解

    fs.stat和fs.fstat他們都是用來獲取文件的狀態(tài)信息,下面這篇文章主要給大家介紹了關于node.js中fs.stat與fs.fstat區(qū)別的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06

最新評論

巴南区| 卫辉市| 油尖旺区| 阜新| 望江县| 富源县| 天祝| 东海县| 安溪县| 玉林市| 布拖县| 延庆县| 尚志市| 洛阳市| 永川市| 新邵县| 湘潭县| 简阳市| 孝昌县| 吉安县| 莒南县| 延寿县| 新巴尔虎右旗| 常州市| 土默特左旗| 扬州市| 巴林左旗| 交口县| 六枝特区| 塔城市| 南岸区| 璧山县| 永新县| 涿州市| 西宁市| 泸溪县| 巴彦淖尔市| 马边| 德庆县| 巴林右旗| 门源|