当前位置: 首页 > 知识库问答 >
问题:

go - 初学gRPC,请教几个问题?

柳越
2023-11-10

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

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

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

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

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

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

共有3个答案

翟嘉志
2023-11-10
  • Q:互相通信是不是需要go与node各开一个服务端与客户端?

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

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

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

    客户端视角 对应的服务端 调用形式
    electron(js) node api(基于 http 协议)
    node go api(基于 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

    所以这题的答案:

    • 取决与你的负责的模块
    • 取决你的兴趣爱好,即使不是自己所负责的,也希望了解。
寇开畅
2023-11-10

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

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

白子默
2023-11-10

当然,我很乐意帮助你理解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 客户端库。

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

 类似资料:
  • 但我很快就发现自己陷入了困境:有页面、模型,也许数据库需要这种场景,似乎有很多事情要做。 我现在该怎么办?我是否需要与所有涉众讨论此方案?对于,我不认为他们真的关心实现,与其他开发人员讨论一下是不是一个好主意? 假设在我与其他一些开发人员讨论之后,我们同意将其拆分为几个小的部分。我们是否可以用格式使这些小部件成为“scenario”,就像我们刚才对cucumber-jvm所做的那样,或者我们是否可

  • 本文向大家介绍java初学者必须理解这几个问题,包括了java初学者必须理解这几个问题的使用技巧和注意事项,需要的朋友参考一下 关于这个系列里的问题,每个学Java的人都应该搞懂。当然,若是仅仅学Java玩玩就无所谓了。若是你以为本人现已逾越初学者了,却不很懂这些问题,请将你本人重归初学者队伍。 问题一:我声明晰什么! String s = "Hello world!"; 许多人都做过这样的事情,

  • 本教程提供了 Go 程序员如何使用 gRPC 的指南。 通过学习教程中例子,你可以学会如何: 在一个 .proto 文件内定义服务。 用 protocol buffer 编译器生成服务器和客户端代码。 使用 gRPC 的 Go API 为你的服务实现一个简单的客户端和服务器。 假设你已经阅读了概览 并且熟悉protocol buffers。 注意,教程中的例子使用的是 protocol buffe

  • 本文向大家介绍go grpc安装使用教程,包括了go grpc安装使用教程的使用技巧和注意事项,需要的朋友参考一下 gRPC是由Google主导开发的RPC框架,使用HTTP/2协议并用ProtoBuf作为序列化工具。其客户端提供Objective-C、Java接口,服务器侧则有Java、Golang、C++等接口,从而为移动端(iOS/Androi)到服务器端通讯提供了一种解决方案。 当然在当下

  • gRPC的Go实现:高性能,开源,通用的RPC框架,将移动和HTTP / 2放在首位。有关更多信息,请参见gRPC快速入门:运行指南。 安装 要安装此软件包,需要安装Go并在计算机上设置Go工作区。安装库的最简单方法是运行: $ go get -u google.golang.org/grpc 有了Go模块支持(Go 1.11+),只需import "google.golang.org/grpc"

  • 本教程的主要内容是介绍如何使用 jMonkeyEngine 进行游戏开发,旨在帮助初学者快速理解 jMonkeyEngine 中的核心概念。由于作者本人水品有限,文中难以避免出现谬误,如您在阅读过程中发现有不对的地方,请告知本人,我会尽快修正。 jME3 官方网站: 官网: http://jmonkeyengine.org/ 论坛: https://hub.jmonkeyengine.org Gi