目标是electron
与go服务程序
的互相通信
比如用go处理一些文件,通过grpc
通信在界面上显示进度
目前我已跑通官网的示例:
https://grpc.io/docs/languages/go/quickstart/
但有几个问题不是很明朗:
- 互相通信是不是需要go与node各开一个服务端与客户端?
- 我不能跳过node直接做到go与electron通信是吗?
- 我不是纯web,所以我不需要
grpc-web
这个库对吗?
我不清楚自己是否理解正确,希望指点一二,谢谢!
目标是electron
与go服务程序
的互相通信
比如用go处理一些文件,通过grpc
通信在界面上显示进度
目前我已跑通官网的示例:
https://grpc.io/docs/languages/go/quickstart/
但有几个问题不是很明朗:
grpc-web
这个库对吗?我不清楚自己是否理解正确,希望指点一二,谢谢!
当然,我很乐意帮助你理解gRPC的相关问题。让我们逐一回答你的问题。
是的,每个需要与gRPC服务器通信的客户端(在这种情况下是 Electron 应用程序)都需要有一个对应的 gRPC 客户端库。对于你的情况,由于你使用的是 Go,你需要为 Electron 创建一个 gRPC 客户端,并且 Electron 应用程序需要有一个服务器来与其 gRPC 客户端进行通信。因此,你需要在 Go 和 Electron 中都创建 gRPC 客户端和服务端。
基本上是这样。虽然 Electron 是用 JavaScript 编写的,但它是运行在 Node.js 环境中的。因此,如果你希望通过 Electron 与 Go 程序进行通信,你需要使用 Node.js 作为中间件,通过它来与 Go 程序进行通信。你可以使用 Node.js 的 gRPC 客户端库与 Go 的 gRPC 服务端进行通信。
grpc-web
这个库对吗?是的,grpc-web
主要用于在浏览器环境中的 JavaScript gRPC 客户端。由于你使用的是 Electron,你不需要这个库。Electron 本身就是基于 Node.js 的,因此你可以直接使用 Node.js 的 gRPC 客户端库。
希望这些信息对你有所帮助!如果你还有其他问题或需要更详细的解释,请随时提问。
Q:互相通信是不是需要go与node各开一个服务端与客户端?
首先服务端和客户端是相对的,这里我举个例子。
假设我们的服务架构是:electron(js)
-> node
-> go
其中 electron(js)
是给用户的使用,由 JS 方式向 node
服务端获取数据,而其中某部分的逻辑是需要调用 go
服务获取数据.
客户端视角 | 对应的服务端 | 调用形式 |
---|---|---|
electron(js) | node | api(基于 http 协议) |
node | go | api(基于 gRPC 协议) |
综上:
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
所以这题的答案:
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答2.2k 阅读
1 回答1.3k 阅读✓ 已解决
我不太清楚你说的啥意思。不过electron不是一个壳嘛?还能替代通信?
其次,你的目前的项目通信架构是怎么样的?
后端是go,有grpc-web了为啥还需要node?node做防腐层嘛?还是你搞错了内容,把react、vue一类的称为node?
如果只用go作为grpc服务端,那你的客户端(react or vue)可以用grpc-web直接像服务端发起请求,没必要使用node作为中间层。你想用node做防腐层就需要。