2015-04-24 121 views
4

我的項目可以分爲3個組件:桌面應用程序,服務器後端,服務器前端。我正在使用websockets應用程序後端和後端前端通信。前端是單頁面應用程序。整體看起來是這樣的:桌面應用程序和web前端之間的通信

application-backend and backend-frontend communication

我需要實現前端和應用程序之間的通信(虛線箭頭上面的圖片)。我能夠使用後端服務器作爲代理,但在前端和應用程序之間進行直接通信會更有用,從而不會浪費後端資源。

有什麼辦法可以建立本地應用程序和網頁前端之間的直接連接?

PS:我使用Go作爲後端和應用程序,JavaScript用於前端和WebSockets進行通信,但歡迎使用一般架構答案。

+3

在這種情況下,「服務器前端」是什麼意思?你是否在討論與「桌面應用程序」相同的瀏覽器上運行的東西? – JimB

+0

「同樣的扶手椅方案」(同一臺機器上的瀏覽器和應用程序)將覆蓋大部分使用案例,但不是全部。歡迎任何建議。 – Ondra

+0

後端資源不會被浪費 - 後端資源所做的事情除了滿足前端請求之外還有哪些重要的事情? – Guanxi

回答

3

您是否試圖從桌面應用程序連接到JavaScript前端?如果是這樣,我可以想到以下選項

  1. WebRTC。它受Chrome(和Opera)和Firefox的支持。
  2. Chrome原生消息傳遞,這僅適用於Chrome顯然,從標準輸入/從您的桌面應用程序發送/接收信息。

總體而言,我認爲WebRTC可能是一個更好的解決方案。這兩種解決方案都需要您在現代瀏覽器中運行您的網頁前端,Chrome/Firefox。

如果您必須處理IE,我只能想到讓您的桌面應用程序運行本地Web服務器,並讓您的Web應用程序進行輪詢/發佈。即使那樣,你也必須解決跨域問題,並且你可能希望圍繞它實現一定程度的安全性,所以它會變得相當混亂。

+0

我特別感興趣的是最後的解決方案。我可以在桌面應用程序中創建本地服務器並關注安全性,但是我認爲我會經常遇到一些防火牆的問題......只是好奇,您認爲我會出現這種問題的頻率如何?我該如何解決它們? – Ondra

+1

如果您連接到本地主機,防火牆通常不會對此做太多的事情,但是在這種情況下,您還需要解決跨域問題:如果您的應用在http:// www上運行。 domain.com,然後連接到http:// localhost將被視爲跨域。 JSONP解決了這個問題。但是,如果您使用https,則不可能,因爲您將無法向本地主機頒發證書。這就是爲什麼我沒有提到這種方法作爲要點之一,因爲它實際上是一種黑客而不是解決方案。 –

+0

@QianQiao WebRTC會很好,但是一個快速的Google搜索沒有出現任何Go WebRTC客戶端。我是忽略了一些東西,還是你建議他從頭開始做WebRTC?我認爲實現WebRTC客戶端不是微不足道的。 –

1

這可能會實現,但可能需要相當多的額外的思路,以安全地做:

讓你的桌面程序的一些任意端口p上運行網絡(插座)服務器,然後試着跟本地主機:p從您的前端。

或者您可以嘗試在瀏覽器和桌面應用程序之間進行WebRTC。快速搜索出現https://github.com/coreos/go-webrtc-datachannel,這是目前的計劃文檔。

相關問題