您的位置:

grpc-web:跨平台实时应用编程解决方案

一、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 应用带来更快、更稳定的通讯能力。