该项目有点类似于家庭自动化项目,因此请牢记家庭自动化 .
-
我有一个名为
S
的全球无障碍服务器 -
有一个名为
M
的移动客户端 -
有一个称为
H
的集线器
由于许多IP是动态的,并且ISP为静态IP收取额外费用并且让客户端口转发其应用程序的端口是不切实际的 .
我听说用于P2P的TCP Hole冲孔可能不可靠,但是使用 S
作为所有请求的代理似乎是不切实际的,因为 S
会有很大的负载 .
我的目标:
将 M
连接到 H
,以便他们可以互相进行RESTful HTTP请求 .
我的问题
-
如何管理
M
或H
无法通过TCP启动连接的情况? (使用UDP?) -
如果TCP打孔没有't work in the situation, could I send UDP packs instead? (UDP'在交付方面不可靠,那么发送多个重复数据包是否保证交付?)
注意事项
我一般都知道打孔是如何工作的, S
必须给两个客户端的 endpoints ,以便他们都可以尝试启动连接 . 我对NAT也有很好的理解
也许对于TCP Hole Punching无效的罕见情况, S
可以充当代理
1 回答
是的通过UDP . 或者使用TCP到S.
这取决于 . 您必须在接收方进行检查,以确定是否收到数据包,然后向发送方发送通知 . 因为您可能会发送10/20相同的数据包,但仍然可能无法到达接收方 . 但是如果你想拥有可靠的数据包传输以及UDP,那么就有一个名为RUDP的协议 .
Note that 无论您使用的是TCP还是UDP,都无法始终成功 Build P2P连接 . 许多时候您必须通过S Build 连接或者您无法连接 . 该场景是,其中一个 endpoints 具有对称NAT,而其他 endpoints 具有PRC / Symmetric NAT . 现在,很多基于LTE的连接使用对称NAT .