一、grpc-web簡介
grpc-web是Google於2018年發佈的一個支持在Web瀏覽器中使用gRPC服務的技術。gRPC 是一個高性能的遠程過程調用框架,支持多種語言,包括 C、C#、Go、Java、Python、Ruby、Objective-C 等等。在跨平台方面,gRPC 也特彆強大,我們既可以使用 gRPC 在各種環境間通訊,也可以使用更輕量級的 protobuf 協議來實現跨語言調用。而 grpc-web 實現了在Web瀏覽器中使用 gRPC 服務的功能,已經在一些大型項目中得到了應用。
二、grpc-web的優點
相對於原本的http通訊,引入gRPC的通訊有如下優點:
1. 更優秀的性能
gRPC採用 Protobuf(Protocol Buffers)作為序列化工具,而 Protobuf 是一種二進制序列化工具,能夠高效地進行編解碼。因此,採用 gRPC 相比 HTTP 通信可以顯著提升性能,尤其是在移動端和高並發場景下。
2. 跨平台支持
gRPC 使用 Protobuf 協議,在不同平台和編程語言之間實現了不受限制的通訊,同時還支持 HTTP/2 協議,使其在 Web 應用中可以很好地使用。
3. 更加靈活的傳輸
gRPC支持多種協議類型,可以選擇不同的序列化方式以及傳輸協議。例如,在 TCP/IP 協議底層上使用 Protobuf 來序列化通訊數據,或者在 HTTP/2 上使用 ProtoBuf 來序列化通訊數據,從而兼具高性能和跨語言支持。
4. 自動生成代碼
gRPC不僅自動生成了客戶端和服務端的底層代碼,還可以通過 proto 編譯器生成相應語言的代碼,方便了開發人員快速上手,減少了開發人員的編寫工作量。
三、grpc-web的使用
1. 環境搭建
在使用 grpc-web 之前,我們需要先安裝 protobuf 和 grpc 環境。同時,也需要安裝對應語言的 grpc 插件,例如 gRPC for Java等。這裡只提供Javascript環境的安裝方式:
npm install grpc-web
同時還需要生成 proto 文件並編譯為 JavaScript,由 proto-loader 幫助我們實現 proto 文件和 JavaScript 的相互轉換。使用如下命令可以進行 proto-loader 的安裝:
npm install @grpc/proto-loader
2. 生成.proto文件
首先需要編寫Protobuf語言的.proto文件,protobuf是一種語言中立、平台中立、可擴展的序列化結構數據的格式,適用於數據存儲、數據交換和配置文件等領域。
以下是簡單的proto文件定義:
syntax = "proto3";
package greeter;
option go_package = "pb";
service Greeter {
rpc Hello(HelloRequest) returns (HelloReply) {
}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
編譯.proto文件:
protoc --proto_path=. ./greeter.proto --js_out=import_style=commonjs:. --grpc-web_out=import_style=commonjs,mode=grpcwebtext:.
3. 編寫前端代碼
使用前需要調用MetholdNameClient來進行初始化:
const { MetholdNameClient } = require('service_grpc_web_pb.js');
const { MetholdRequst } = require('service_pb.js');
const client = new MetholdNameClient('http://localhost:8080', null, null);
const name = 'world';
const request = new MetholdRequst();
request.setName(name);
client.metholdName(request, {}, (err, response) => {
if (err) {
console.log(err);
} else {
console.log(response.getData());
}
});
初始化後,就可以通過調用gRPC方法進行通訊了。
四、grpc-web的實際應用
grpc-web已經在一些大型項目中得到了應用,如Uber的調度系統等。另外,使用 gRPC + grpc-web 進行微服務架構的部署也是不錯的選擇。
五、總結
grpc-web是一個非常高效的跨平台實時應用編程解決方案,它充分利用了gRPC和Protobuf所提供的高性能和跨平台支持等優點,在Web應用開發中得到廣泛應用。使用 grpc-web,我們可以給 Web 應用帶來更快、更穩定的通訊能力。
原創文章,作者:EKUJA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/315720.html