桌面应用程序和Web前端之间的通信

4
我的项目可以分为三个组件:桌面应用程序、服务器后端和服务器前端。我正在使用WebSockets应用程序后端和后端前端通信。前端是单页应用程序。整个项目的结构如下图所示: application-backend and backend-frontend communication 我需要实现前端与应用程序之间的通信(上图中的虚线箭头)。我能够使用后端服务器作为代理,但直接在前端和应用程序之间建立通信会更有用,这样可以避免浪费后端资源。
有没有什么方法可以在本地应用程序和Web前端之间建立直接连接?
附注:我在后端和应用程序中都使用了Go,前端使用JavaScript进行开发,并使用WebSockets进行通信,但我们欢迎一般架构方面的回答。

3
在这种情况下,“服务器前端”是什么意思?你是在说与“桌面应用程序”在同一台计算机上运行的浏览器中的某些内容吗? - JimB
“同一把椅子的情况”(浏览器和应用程序在同一台机器上)可以涵盖大多数用例,但并非所有情况。欢迎任何建议。 - Ondra
后端资源不会被浪费 - 除了满足前端请求之外,后端资源还在做什么重要的事情? - Guanxi
关系:在这种情况下,我只需要后端进行身份验证/授权,服务器端不会真正执行任何工作,因此它不仅涉及服务器资源,还涉及通过后端与应用程序前端通信时的延迟。 - Ondra
2个回答

3
你是否在尝试从桌面应用程序连接到JavaScript前端?如果是的话,我可以考虑以下几个选项:
  1. WebRTC。它被Chrome(和Opera)和Firefox支持。
  2. Chrome原生消息传递,这仅适用于Chrome,可以从你的桌面应用程序发送/接收信息。
总的来说,我认为WebRTC可能是更好的解决方案。这两种解决方案都需要在现代浏览器中运行你的Web前端,如Chrome / Firefox。
如果你必须处理IE,我只能想到让你的桌面应用程序运行一个本地Web服务器,并使你的Web应用程序轮询/发送到它。即使如此,你还需要解决跨域问题,并且可能需要实现一定程度的安全性,因此会变得相当混乱。

我特别对最后一种解决方案感兴趣。我可以在桌面应用程序中创建本地服务器并确保安全性,但我认为我经常会遇到一些防火墙问题...只是好奇,您认为我会经常遇到这些问题吗?我该如何解决它们? - Ondra
1
如果您连接到本地主机,防火墙通常不会对此产生太多麻烦,但在这种情况下,您还需要解决跨域问题:如果您的应用程序运行在http://www.domain.com上,则连接到http://localhost将被视为跨域。 JSONP解决了这个问题。但是,如果您使用https,那么这将变得不可能,因为您将无法向localhost发放证书。这就是为什么我没有将此方法列为要点之一的原因,因为它实际上是一种hack而不是解决方案。 - Qian Qiao
@QianQiao WebRTC很不错,但是快速的谷歌搜索并没有找到任何Go WebRTC客户端。我是不是漏看了什么,或者你是在建议他从头开始做WebRTC?我认为实现一个WebRTC客户端并不是一件容易的事情。 - Trevor Dixon
@TrevorDixon WebRTC连接是在桌面应用程序和Web前端之间建立的,我想桌面应用程序是使用C#或C++或类似语言编写的,这些语言中都有免费提供的WebRTC实现。 - Qian Qiao
@QianQiao他说:“PS:我同时使用Go语言进行后端和应用程序开发…” 我理解他的意思是他的桌面应用程序是用Go语言编写的(CLI?)。关于“但如果您使用https,这将变得不可能,因为您将无法向localhost颁发证书”,他不能设置一个解析为127.0.0.1的域名或子域名,然后获取该域名的证书吗? - Trevor Dixon

1
这个方法可能可行,但需要更多的思考来确保安全性:让您的桌面程序在任意端口p上运行web(socket)服务器,然后尝试从前端与localhost:p通信。或者您可以尝试在浏览器和桌面应用程序之间进行WebRTC。快速搜索找到了https://github.com/coreos/go-webrtc-datachannel,目前仅是一个规划文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接