Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 桌面应用程序与web前端的通信_Html_Architecture_Go_Websocket - Fatal编程技术网

Html 桌面应用程序与web前端的通信

Html 桌面应用程序与web前端的通信,html,architecture,go,websocket,Html,Architecture,Go,Websocket,我的项目可以分为3个组件:桌面应用程序、服务器后端、服务器前端。我正在使用websockets应用程序后端和后端前端通信。前端是单页应用程序。整体看起来是这样的: 我需要实现前端和应用程序之间的通信(上图中的虚线箭头)。我可以使用后端服务器作为代理,但在前端和应用程序之间进行直接通信更有用,这样后端资源就不会被浪费 有没有办法在本地应用程序和web前端之间建立直接连接 PS:我对后端和应用程序都使用Go,对前端使用JavaScript,对通信使用WebSocket,但欢迎使用一般架构答案。这可

我的项目可以分为3个组件:桌面应用程序、服务器后端、服务器前端。我正在使用websockets应用程序后端和后端前端通信。前端是单页应用程序。整体看起来是这样的:


我需要实现前端和应用程序之间的通信(上图中的虚线箭头)。我可以使用后端服务器作为代理,但在前端和应用程序之间进行直接通信更有用,这样后端资源就不会被浪费

有没有办法在本地应用程序和web前端之间建立直接连接


PS:我对后端和应用程序都使用Go,对前端使用JavaScript,对通信使用WebSocket,但欢迎使用一般架构答案。

这可能会起作用,但可能需要额外考虑一些安全问题:

让您的桌面程序在某个任意端口p上运行web(套接字)服务器,然后尝试从前端与localhost:p对话


或者您可以尝试在浏览器和桌面应用程序之间执行WebRTC。这时出现了一个快速搜索,这只是一个计划文档。

您正在尝试从桌面应用程序连接到JavaScript前端吗?如果是这样的话,我可以考虑以下选择

  • WebRTC。它由Chrome(和Opera)和Firefox支持
  • Chrome本机消息,这显然只适用于Chrome,从stdin/桌面应用程序发送/接收信息
  • 总的来说,我认为WebRTC可能是一个更好的解决方案。这两种解决方案都要求您在现代浏览器Chrome/Firefox中运行web前端


    如果您必须处理IE,我只能考虑让您的桌面应用程序运行本地web服务器,并让您的web应用程序轮询/发布到它。即使这样,您也必须解决跨域问题,并且您可能希望围绕它实现某种级别的安全性,因此它变得相当混乱。

    在这种情况下,“服务器前端”是什么意思?你说的是在同一台机器上的浏览器中运行的与“桌面应用程序”相同的东西吗?“相同的扶手椅场景”(同一台机器上的浏览器和应用程序)将涵盖大多数用例,但不是所有用例。欢迎任何建议。后端资源不会被浪费——除了满足前端的请求之外,后端资源在做什么重要的事情?关系:在这种情况下,我需要后端只是为了身份验证/授权,服务器端没有真正的工作,所以不仅仅是服务器资源,但在通过后端与应用程序前端通信时也会出现延迟。我对最后一个解决方案特别感兴趣。我可以在桌面应用程序中创建本地服务器,并注意安全性,但我认为我会经常遇到一些防火墙问题。。。我只是好奇,你认为我多久会有这样的问题?如果你连接到本地主机,防火墙通常不会对此大惊小怪,但是,在这种情况下,你也需要解决跨域问题:如果你的应用程序运行,那么连接到将被视为跨域。JSONP解决了这个问题。但是,如果您使用https,这将变得不可能,因为您将无法向localhost颁发证书。这就是为什么我没有提到这个方法作为要点之一,因为它实际上是一个黑客而不是一个解决方案。@QianQiao WebRTC会很好,但是快速的谷歌搜索没有找到任何Go WebRTC客户端。是我忽略了什么,还是你建议他从头开始做WebRTC?我认为实现WebRTC客户端不是微不足道的。@ TeVrdixon WebRTC连接是在桌面应用程序和Web前端之间的,我想桌面应用程序是用C语言或C++语言编写的,或者类似的语言,在所有这些语言中都有WebRTC实现。“PS:我在后台和应用程序中都使用Go…”我认为这意味着他的桌面应用程序是用Go(CLI?)编写的。关于“但是,如果您使用https,这将变得不可能,因为您将无法向localhost颁发证书,“他不能设置一个解析为127.0.0.1的域或子域,然后获取该域的证书吗?”?