NodeJS?GRPC?多個?.proto?文件的處理步驟
1. 安裝依賴
首先,確保你已經(jīng)安裝了 grpc-tools
和 grpc_tools_node_protoc_ts
:
npm install grpc-tools grpc_tools_node_protoc_ts --save-dev
2. 定義 .proto 文件
假設(shè)我們有兩個 .proto
文件:service_a.proto
和 service_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.js
和 service_b_pb.js
:
- 包含 Protocol Buffers 消息的定義和序列化/反序列化邏輯。
- 定義了
.proto
文件中聲明的消息類型,并提供了相應(yīng)的 getter 和 setter 方法。 service_a_grpc_pb.js
和service_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)文章
npm install常見錯誤類型及對應(yīng)的解決方案
在前端開發(fā)中,npm是最常用的包管理工具,通過 npm install 命令,開發(fā)者可以輕松地安裝項目所需的依賴包,然而,在實際使用過程中,npm install 可能會因為各種原因而報錯,本文將詳細(xì)介紹一些常見的 npm install 錯誤類型、發(fā)生原因及其對應(yīng)的解決方案,需要的朋友可以參考下2025-03-03如何解決安裝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的異步加上Nginx的反向代理在性能上實在是給力!需要的朋友可以參考下2015-06-06Node.js實現(xiàn)一個HTTP服務(wù)器的方法示例
這篇文章主要介紹了Node.js實現(xiàn)一個HTTP服務(wù)器的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05