前言
gRPC 是Google開源的高效能跨語言RPC 框架,它的目標是讓客戶端應用像呼叫本地函數一樣呼叫伺服器端的方法,支援多種程式語言,包括:C 、 Python、Java、Go、Node.js 等語言。
在Node.js 中使用gRPC 可以極大地方便我們進行服務端和客戶端的交互,並且在保證高性能的同時,也可以提供資料安全和保密性,本文將介紹如何使用Node. js 搭建gRPC 服務端和客戶端。
第一步:安裝 Node.js 和 gRPC
首先,需要確保本機已經安裝了 Node.js 和 npm。然後,在終端機輸入以下指令安裝 gRPC:
npm install -g grpc
安裝完成後,你可以在 package.json 檔案中看到 gRPC 的版本資訊。
第二步:定義.proto檔案
gRPC 透過proto-file 定義服務,該檔案用於定義服務的介面、訊息格式等等。下面我們先定義一個簡單的服務,讓客戶端向服務端發送一個訊息,收到訊息後傳回一個已修改的訊息。建立一個名為example.proto 的文件,定義以下內容:
syntax = "proto3"; package example; service Example { rpc ModifyMessage (Message) returns (Message){} } message Message { string content = 1; }
第三步:產生程式碼
在example.proto 檔案所在的目錄中執行下列指令,產生對應的程式碼:
grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./ --grpc_out=./ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` example.proto
這裡使用了grpc_tools_node_protoc 產生Node.js 所需的程式碼,並指定了輸出目錄。
產生的程式碼包括:example_pb.js 和 example_grpc_pb.js。
第四步:實作服務端
伺服器端程式碼如下:
const grpc = require("grpc"); const example = require("./example_pb"); const exampleService = require("./example_grpc_pb"); const server = new grpc.Server(); function modifyMessage(call, callback) { const response = new example.Message(); response.setContent(call.request.getContent().toUpperCase()); callback(null, response); } server.addService(exampleService.ExampleService, { modifyMessage: modifyMessage, }); server.bind("localhost:50051", grpc.ServerCredentials.createInsecure()); console.log("Server running at http://localhost:50051"); server.start();
在這個範例中,服務端新建了一個grpc 伺服器,並在該伺服器上新增了一個名為modifyMessage 的方法。此方法接收一個 Message 物件作為參數,將 Message 物件中的 content 欄位轉換為大寫並傳回。
最後,我們使用 bind() 方法將服務綁定到 localhost:50051,並啟動伺服器。
第五步:實作客戶端
客戶端程式碼如下:
const grpc = require("grpc"); const example = require("./example_pb"); const exampleService = require("./example_grpc_pb"); const client = new exampleService.ExampleClient( "localhost:50051", grpc.credentials.createInsecure() ); const request = new example.Message(); request.setContent("Hello World!"); client.modifyMessage(request, function (err, response) { console.log("Modified message: ", response.getContent()); });
在這個範例中,我們建立了一個ExampleClient 對象,並使用它的modifyMessage()方法向服務端傳送一個Message 物件。最後,我們輸出服務端的回應,該回應已經將字串中的字母轉換為大寫字母。
第六步:執行服務
現在,我們只需要在伺服器程式碼所在的目錄中使用以下命令啟動服務:
node server.js
然後,在客戶端程式碼所在的目錄中執行以下命令:
node client.js
你應該會看到以下輸出:
Modified message: HELLO WORLD!
至此,我們已經成功地實現了一個基礎的gRPC 服務端和客戶端的互動過程。
總結
本文介紹如何使用 Node.js 建立 gRPC 服務端和客戶端,並在建立服務和建立連線之間使用 protobuf 定義了資料結構和訊息格式。 gRPC 是一個功能強大的跨語言 RPC 框架,對於需要在客戶端和服務端之間快速傳輸資料的應用非常有用。
以上是nodejs搭建grpc的詳細內容。更多資訊請關注PHP中文網其他相關文章!