2016-04-06 32 views
0

我試圖想出一個能夠在嵌入式設備(基於xMega128(C))和Android應用程序之間進行數據交換的解決方案。數據交換必須通過互聯網進行,嵌入式設備和運行應用程序的移動設備可以位於不同的NAT後面,使用不同的ISP,3G,LTE等進行連接。在NAT後面工作 - 一種設備通信方案

我試過UDP打孔,但它不適用於對稱NAT。預測多孔衝孔也不能保證100%的可靠性。我也考慮過使用ICE,但ICE C庫(pjnath,libnice)與所選的硬件不兼容(libs需要os)。現在我正在考慮實施或使用(如果存在)交通中繼服務器,但這對我來說似乎只是一種駭客。

有沒有其他的選擇我沒有考慮過?任何幫助將不勝感激。

理想地,所述通信方式將是:

  • 100%可靠

  • 相對低的等待時間(3秒鐘絕對最大值)

  • 可伸縮(即至多500K設備在未來)

  • 可通過應用程序和設備初始化

  • 多用戶 - 一個設備將連接到許多Android應用

而且,如果這能幫助,設備和應用程序之間的數據交換不是非常高強度 - 每小時大約1次會議每個會話約50條消息,每條消息之間10-20秒,每條消息重約100字節。

回答

0

你所描述的是有效的對等或其子集,並且可靠地工作是一項很多工作。如果點對點失敗,通常會回退到中繼服務器。它可以做到,但是做這件事的數量是相當大的。您的需求清單也相當陡峭...

100%可靠

有一個可靠的連接沒有這樣的事情。您需要構建應用程序的容錯性,以使其可靠。

相對低的等待時間(3秒鐘絕對最大值)

常常你將由於光的物理即速度的限制。低延遲很困難。

可擴展性(即至多在未來的50萬層的設備)

我不知道這是什麼意思即是這樣的併發連接?

維基百科上的NAT穿越

許多技術存在,但由於NAT行爲不規範在任何情況下 沒有單一的方法效果。許多NAT穿越技術 需要來自服務器的可公開路由IP地址的幫助。 某些方法僅在建立連接時使用服務器,而其他方法則基於通過它中繼所有數據,這會增加帶寬成本並增加延遲,不利於實時語音和視頻通信。

即它有時會工作,即它將是不可靠的,所以你需要使用幾種方法使其可靠。

+0

一臺設備與最多10臺智能手機通信。讓我們稱之爲系統。可能有多達500,000個這樣的系統,並且解決方案必須能夠處理它。 – rojarand

0

只要兩個端點位於不受控制的不同NAT後面,它就無法可靠工作。沒門。你需要一個繼電器。