我正试图想出一种解决方案,使嵌入式设备(基于xMega128(C))和安卓应用程序之间能够进行数据交换。问题是必须通过Internet进行数据交换,嵌入式设备和运行应用程序的移动设备都可以通过不同的NAT连接,使用不同的ISP、3G、LTE等进行连接。
我试过UDP打孔,但它不适用于对称NAT。多孔预测冲孔也不能保证100%的可靠性。我也考虑使用ICE,但是ICE C库(pjnath,libnice)与选择的硬件不兼容(libs需要os)。现在,我正在考虑实现或使用(如果存在)流量中继服务器,但对我来说,这似乎是一次黑客攻击。
还有其他我没有考虑过的选择吗?任何帮助都将不胜感激。
理想情况下,通信计划将是:
此外,如果这有帮助的话,设备和应用程序之间的数据交换并不是很高强度--大约每小时1次,每次会话大约50条消息,每次10到20秒,每条消息重约100字节。
发布于 2016-04-06 08:20:23
您所描述的是有效的点对点或其子集,要使其可靠工作是一项艰巨的工作。当对等点失败时,通常会回到中继服务器上。这是可以做到的,但工作量相当大。你的要求清单也很陡峭.
100%可靠
没有可靠的联系。您需要建立对应用程序的容错能力,以使其可靠。
相对较低的延迟(3秒绝对最大)
你常常会受到物理学的限制(光速)。低延迟是很难的。
可扩展的(比如将来最多可扩展到500 K的设备)
我不知道这是什么意思(这是并发连接吗?)
来自维基百科的NAT穿越
有许多技术存在,但由于NAT行为不规范,没有一种方法在每种情况下都有效。许多NAT穿越技术需要来自可公开路由IP地址的服务器的帮助。有些方法只在建立连接时才使用服务器,而另一些方法则基于通过服务器中继所有数据,这增加了带宽成本,增加了延迟,不利于实时语音和视频通信。
它有时会工作的(不可靠的),所以你需要用几种方法使它可靠。
发布于 2016-04-06 08:08:29
只要两个端点都落后于您无法控制的不同NAT,它就不会可靠地工作。不行。你需要接力器。
https://stackoverflow.com/questions/36444522
复制相似问题