如何从 Google 云平台服务调用桌面应用程序?

How can I invoke a desktop app from Google Cloud Platform services?

我正在构建一个桌面客户端应用程序 (win/linux/mac),其后端托管在 GCP 中(我也在考虑其他云平台)。桌面应用程序应该是简约的,并向后端提供对本地机器资源的访问。我正在寻找一种从服务器调用我的应用程序的方法(当某些事件发生时),然后该应用程序将在本地计算机上执行一些工作。这是我到目前为止尝试过的方法。

  1. Google Cloud Pub/Sub。似乎它满足了我的需要,但要使其正常工作,我必须创建一个服务帐户,生成 JSON 密钥并将其存储在本地,这并不好。当然,我可以限制服务帐户的访问权限,但对我来说仍然不太好。也许还有其他方法可以在最终用户机器上验证我的应用程序 运行?我想让我的桌面应用程序保持最小(理想情况下没有 UI,只有一个“代理”控制台进程/Windows 服务)。也许我可以考虑一个登录屏幕来连接应用程序和后端,如果这样可以解决问题,但我不想过于复杂。

  2. Google Cloud Run + SignalR / WebSockets. This solution also looks good, but it has one significant disadvantage. As long as there's at least one open WebSocket the Cloud Run instance is considered active and therefore billed. There are other difficulties 也与可伸缩性和容器实例同步有关。

您如何看待以上选项,还有哪些其他可能性?我是否只剩下 REST API 和轮询更新?我对云的东西很陌生,所以任何帮助表示赞赏。谢谢!

如果您希望能够从 Google 云端调用您的本地应用程序,您需要两件事

  • 第一个,在 Google 云上注册您的应用程序,最好使用身份验证机制(例如可以是 API 密钥)。像这样,GCP 后端知道在哪里调用你的应用程序(哪个IP/port)以及如何(身份验证机制)
  • 第二个是启动您的应用程序并运行并收听外部通信。 HTTP 是最简单的方法。等待对注册期间定义的 IP/port 的 HTTP 调用,检查身份验证并执行该过程。

例如,您可以将数据(位置和身份验证)存储在 firestore 中,并使用 Cloud 运行 执行 HTTP 调用。


您也可以逆向解决方案并在 运行 时从本地应用程序轮询(长轮询或常规轮询)后端。

两种方法都是可行的,第二种方法稍微容易一些,但在管理安全性方面可能具有挑战性。