示例项目
关于 gRPC-Web 的应用
在前端和后端通讯的过程中,REST API 一直是一个常见的方案。但是随着技术的发展,gRPC-web 逐渐成为了一种新的选择。
什么是 gRPC-Web?
gRPC-web 是基于 gRPC 的 Web 客户端实现,它允许您在浏览器中直接调用 gRPC 服务。与传统的 gRPC 不同,gRPC-web 使用 HTTP/1.1 或 HTTP/2 协议进行通信,这使得它可以支持使用浏览器的 Web 应用程序。
注意: gRPC-web 不支持客户端流和双向流,但是支持服务端数据流。
定义 Proto 文件
关于 Proto 文件的定义可以到
前端基于 vite 的示例
首先,我们需要在前端项目中安装 grpc-web 包。可以使用 npm 进行安装:
npm install grpc-web
接下来,在
webpack.config.js
中添加以下代码,以允许 webpack 编译 .proto
文件:module.exports = { // ... module: { rules: [ // ... { test: /\\.proto$/, loader: "@grpc/proto-loader", }, ], }, };
然后,我们需要创建一个 gRPC 的客户端,以便在浏览器中调用 gRPC 服务。以下是一个示例:
import { GreeterClient } from "./proto/greeter_pb_service.js"; import { HelloRequest } from "./proto/greeter_pb.js"; const client = new GreeterClient("<http://localhost:8080>"); const request = new HelloRequest(); request.setName("World"); client.sayHello(request, {}, (err, response) => { if (err) { console.error(err); return; } console.log(response.getMessage()); });
服务端基于 .NET 的示例
在 .NET 中使用 gRPC-web 也非常简单。首先,我们需要安装以下 NuGet 包:
- Google.Protobuf
- Google.Api.CommonProtos
接下来,我们可以在 Startup.cs 中添加以下代码,以启用 gRPC-web:
public void ConfigureServices(IServiceCollection services) { services.AddGrpc(); services.AddGrpcWeb(options => options.GrpcWebEnabled = true); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... app.UseRouting(); app.UseGrpcWeb(); app.UseEndpoints(endpoints => { endpoints.MapGrpcService<MyService>().EnableGrpcWeb(); }); }
最后,我们可以在 MyService.cs 中实现我们的 gRPC 服务:
public class MyService : Greeter.GreeterBase { public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = "Hello " + request.Name }); } }
这样,我们就可以在浏览器中通过 gRPC-web 调用我们的服务了!
总结
gRPC-web 是一个非常有前途的技术,它可以让我们在 Web 应用程序中使用 gRPC,从而使我们的工作更加高效和简单。希望这篇文章能够对你有所帮助!