GRPC在网页前端的使用

一直以来都是一个桌面端程序狗,某天突发奇想,想用网页实现一个客户端,于是开始了electron+vue+asp.netcore的探寻之路,这条道路很坎坷主要是css让我头疼不已(当然我们并没有放弃使用wpf,我是一个wpf老手,最近项目使用到GRPC特此分享一下入坑经验)。

      我们总是依赖于使用Axios来进行远程数据传递,Axios是以json明文方式传递数据,这个方式对于调试非常友好,但是却没法节省网络带宽,而且我个人是比较热衷于更前沿的技术,所以我选择使用grpc(对了忘了说一句,如果你是用的nodejs那么恭喜你你没有这么多坑爹问题,因为nodejs使用的是完整版的grpc,而JavaScript使用的是grpc-web,)废话不多说,说干就干。

       首先需要准备一个可靠的后台程序,因为我实在是太喜欢C#了,所以我选择使用Asp.net.core(其实主要原因是Asp.net.core官方对grpc-web支持最好,这里不得不说一句微软牛B,其他的后台我只能呵呵,因为都需要使用代理服务器,如果有不需要的欢迎打脸, 当然反向代理那也是代理),使用Asp.Net.Core创建一个Grpc服务器也很简单,只需要在创建grpc工程时选择gRPC即可。

Ø 这是一个Grpc服务器的创建过程:

6de827a8769dcf5880692c937ff135c2.png

Ø 这是我的pb文件(是由vs默认生成):

5427079bb318ccb2911c133b1df21a08.png

  • 这是Grpc的一个服务(是由vs默认生成)

9a36c283f72e81d583b5dd5e45a8bddc.png

Ø 启动Grpc服务

57316aa938cd5919295c1c2dcebec11c.png

    接着使用npm安装grpc-web +gooble-protobuf (因为本人使用的是typescript所以我还安装了@improbable-eng/grpc-web + @types/google-protobuf)(另外如果你希望在执行自动编译protobuffer文件编译的话还建议安装grpc-tools ,如果你需要这样的功能那么可以跟我深入探讨一下,这里需要自己做一个编译脚本)。

       完成了上面的准备工作,那么恭喜你,你已经完成了80%的工作了,你可以开始在前台使用grpc服务了,经过一通折腾(包括拷贝protobuffer文件,将protobuffer文件编译成对应的js文件)(对了在vue中如果想要做一个plugins那么请查阅vue的官方描述文档,这个文档说了跟没说差别不大,说得太简单了 -- 为什么要这么做,当然就是可以实现一个单例啊)。

Ø 这是我的typescript调用方式:

b31dac2a7f3e533d1242592b3e413822.png

Ø 编译工程运行前台网页程序:

da482b360fde895896958389e874976c.png

       没错结果就是这样,我在前面说了javascript只支持grpc-web,而我们却把grpc-web当成grpc在使用,为了解决这个问题,我经过多方查证(grpc-web官网以及微软Asp.net.core的官网),找到了两个解决方案

方案1:使用官方推荐的代理,进行转发(grpcwebproxy 这是官方提供的代理服务,下载地址Releases · improbable-eng/grpc-web(github.com)

Ø 下载完成启动代理,以下是代理启动命令以及各参数的意义:

a1321614bcfbbda70ffa022ef980625b.png

e2d2d4d50974b23602a146338107228a.png

Ø  修改前台调用代码的端口定向到代理服务器(代理端口是5005)

e8820ee633066d933dde59c00794b11c.png

Ø  运行网页查看通讯:

354f94abe2a9205b6e06ed043ca32e9f.png

Good这是一个看似完美的解决方案,但是对于一个客户端来说你需要在一台机器上开两个后台,这个设定看上去很2。

方案2:使用Asp.Net.Core官网做法(在浏览器应用中使用 gRPC | Microsoft Docs),微软牛B

Ø在Asp.Net.Core的grpc工程中添加 Grpc.AspNetCore.Web支持库(nuget搜索添加即可)

Ø修改Startup配置

3475493d77046361499f306f592f31d1.png

Ø启动Grpc服务器

447f4073d29d6be012d0a605b0e69c83.png

Ø 修改javascript调用host(注意目前我只找到https的协议方式http仍然不能使用,我还不知道用什么办法解决)

eb01c401889b6dba939531f0aca356bb.png

Ø 编译运行网页客户端

ae91018430270b1e12be46073ab9aa9d.png

Good这是一个近乎完美的方案,这个方案简直是最佳方案,虽然我还没有找到怎么使用http而不使用https.

至此,终于可以安心的用网页写客户端了。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值