0

我正在尝试提出一种解决方案,支持在嵌入式设备(基于 xMega128(C))和 Android 应用程序之间进行数据交换。问题是数据交换必须通过互联网进行,嵌入式设备和运行应用程序的移动设备都可以在不同的 NAT 后面,使用不同的 ISP、3G、LTE 等进行连接。

我尝试了 UDP 打孔,但它不适用于对称 NAT。带有预测的打孔也不能保证 100% 的可靠性。我也考虑过使用 ICE,但是 ICE C 库(pjnath、libnice)与选择的硬件不兼容(libs 需要 os)。现在我正在考虑实施或使用(如果存在)流量中继服务器,但这对我来说似乎是一种黑客行为。

还有其他我没有考虑过的选择吗?任何帮助将不胜感激。

理想情况下,通信方案将是:

  • 100% 可靠

  • 相对较低的延迟(3 秒绝对最大值)

  • 可扩展(比如未来多达 50 万台设备)

  • 可由应用程序和设备初始化

  • 多用户——一台设备可以连接许多安卓应用

此外,如果这有帮助,设备和应用程序之间的数据交换不是非常高强度 - 大约每小时 1 个会话,每个会话约 50 条消息,它们之间的时间为 10-20 秒,每条消息的重量约为 100 字节。

4

2 回答 2

0

您所描述的实际上是点对点或其子集,并且要使其可靠地工作需要做很多工作。在对等失败的情况下,您通常会退回到中继服务器。它可以完成,但是要做的工作量很大。您的要求清单也很陡峭...

100% 可靠

没有可靠的连接。您需要为应用程序构建容错功能以使其可靠。

相对较低的延迟(3 秒绝对最大值)

很多时候你会受到物理学的限制,即光速。低延迟很难。

可扩展(比如未来多达 50 万台设备)

我不知道这意味着什么,即这是并发连接吗?

来自关于 NAT Traversal 的维基百科

存在许多技术,但由于 NAT 行为未标准化,因此没有一种方法适用于所有情况。许多 NAT 穿越技术需要来自公共可路由 IP 地址的服务器的帮助。有些方法仅在建立连接时使用服务器,而另一些方法则基于通过它中继所有数据,这增加了带宽成本并增加了延迟,不利于实时语音和视频通信。

即它有时会起作用,即它不可靠,因此您需要使用多种方法使其可靠。

于 2016-04-06T08:20:23.407 回答
0

只要两个端点都位于您无法控制的不同 NAT 之后,它就无法可靠地工作。没门。你需要一个继电器。

于 2016-04-06T08:08:29.740 回答