初学gRPC,请教几个问题?

目标是electrongo服务程序的互相通信

比如用go处理一些文件,通过grpc通信在界面上显示进度

目前我已跑通官网的示例:
https://grpc.io/docs/languages/go/quickstart/

但有几个问题不是很明朗:

  • 互相通信是不是需要go与node各开一个服务端与客户端?
  • 我不能跳过node直接做到go与electron通信是吗?
  • 我不是纯web,所以我不需要grpc-web这个库对吗?

我不清楚自己是否理解正确,希望指点一二,谢谢!

阅读 1.3k
avatarAI BotBETA

当然,我很乐意帮助你理解gRPC的相关问题。让我们逐一回答你的问题。

  • 互相通信是不是需要go与node各开一个服务端与客户端?

是的,每个需要与gRPC服务器通信的客户端(在这种情况下是 Electron 应用程序)都需要有一个对应的 gRPC 客户端库。对于你的情况,由于你使用的是 Go,你需要为 Electron 创建一个 gRPC 客户端,并且 Electron 应用程序需要有一个服务器来与其 gRPC 客户端进行通信。因此,你需要在 Go 和 Electron 中都创建 gRPC 客户端和服务端。

  • 我不能跳过node直接做到go与electron通信是吗?

基本上是这样。虽然 Electron 是用 JavaScript 编写的,但它是运行在 Node.js 环境中的。因此,如果你希望通过 Electron 与 Go 程序进行通信,你需要使用 Node.js 作为中间件,通过它来与 Go 程序进行通信。你可以使用 Node.js 的 gRPC 客户端库与 Go 的 gRPC 服务端进行通信。

  • 我不是纯web,所以我不需要grpc-web这个库对吗?

是的,grpc-web 主要用于在浏览器环境中的 JavaScript gRPC 客户端。由于你使用的是 Electron,你不需要这个库。Electron 本身就是基于 Node.js 的,因此你可以直接使用 Node.js 的 gRPC 客户端库。

希望这些信息对你有所帮助!如果你还有其他问题或需要更详细的解释,请随时提问。

2 个回答

我不太清楚你说的啥意思。不过electron不是一个壳嘛?还能替代通信?
其次,你的目前的项目通信架构是怎么样的?

后端是go,有grpc-web了为啥还需要node?node做防腐层嘛?还是你搞错了内容,把react、vue一类的称为node?
如果只用go作为grpc服务端,那你的客户端(react or vue)可以用grpc-web直接像服务端发起请求,没必要使用node作为中间层。你想用node做防腐层就需要。

  • Q:互相通信是不是需要go与node各开一个服务端与客户端?

    首先服务端和客户端是相对的,这里我举个例子。

    假设我们的服务架构是:electron(js) -> node -> go

    其中 electron(js) 是给用户的使用,由 JS 方式向 node 服务端获取数据,而其中某部分的逻辑是需要调用 go 服务获取数据.

    客户端视角对应的服务端调用形式
    electron(js)nodeapi(基于 http 协议)
    nodegoapi(基于 gRPC 协议)

    综上:

    • gRPC 的使用,在 node -> go 仅仅只是一种协议方式,不限于一定要用 gRPC,也可以用 http 协议。当然选择不一样,带来的如:性能、架构、维护成本等等也不尽相同。
    • 相关的服务端与客户端:参考如上表格

  • Q: 我不能跳过node直接做到go与electron通信是吗?

    先说答案:可以

    如第一个问题的描述,完全可以通过 electron(js) -> go。这是基于系统复杂性来划定,如何拆分服务,行业上一般称为“微服务”。


  • Q: 我不是纯web,所以我不需要grpc-web这个库对吗?

    这个库是一个面向客户端(如桌面端、移动端、Web 端)调用提供 gRPC 协议的服务端,假设,架构是 electron(js) --grpc协议--> go。其中 go 以 gRPC 服务提供 API。

    因多数客户端本身属性,不支持 gRPC 协议,所以可以通过 grpc-web 服务,中间做一层代理,兼容此类协议。所以它的架构间接性变成了:

    electron(js) --http协议--> grpc-web --grpc协议--> go

    所以这题的答案:

    • 取决与你的负责的模块
    • 取决你的兴趣爱好,即使不是自己所负责的,也希望了解。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题