Wim*_*tra 3 p2p objective-c gamekit ios
对于我正在开发的iOS应用程序,我希望多个手机相互连接,并能够在这些设备之间进行语音聊天.
当两个设备都在同一个网络上时,我就可以使用它.这很简单,我想做的大部分事情都是可能的.
但现在我正在增加互联网支持,这是一件非常麻烦的事情.我将首先尝试使用我设置的小型Web服务来解释我希望如何匹配设备.
服务器
网络服务
客户
这不起作用,因为我的网络不允许传入连接和随机端口(来自外部网络).
但现在的问题是,我该如何解决这个问题呢?我希望能够在2个设备之间建立对等连接,这些设备可以在同一网络上,也可以在不同的网络上.
是否有框架,示例或任何显示如何执行此操作的内容?我希望能够将数据从设备发送到设备,而不是先将其发送到服务器.
我不知道有任何框架可以做到这一点.但是我对跨多个网络的p2p网络有很多经验.
我学到的一条重要规则是:在网络之间进行通信时,除非必要,否则不要创建直接连接.有太多因素可以(会?)导致问题,例如防火墙,NAT等.
当然,您可以先尝试连接.您可以尝试连接到给定的IP地址*,但在大多数情况下它会失败.即使使用UPnP和NAT-PMP,您会发现在很多情况下(超过一半?)您根本无法接受传入连接.
所以一定要有备份计划.创建一个网络层抽象,不仅listen()可以连接到服务器,还可以连接到服务器.这样,当您无法连接到客户端的IP*时,您只需通过服务器建立连接,网络抽象就可以完成所有操作.
让我重申以上内容:不要仅依赖传入连接,始终有备份计划.
*我写IP,因为客户端可以有多个本地/远程IP.连接时始终迭代所有这些IP.示例:我的手机有2个本地IPv4地址(10.0.0.172和10.8.0.2)和一个IPv6地址([2001:x:x :: 6]).在这三个地址中,只有IPv6地址是可公开访问的,并且这两个IPv4地址位于不同的子网上,因此您是否可以连接到它们取决于另一个客户端所在的子网.始终尝试连接到两者,并在失败时回退到服务器代理的连接.
**我提到了IPv6,是的.我们不要忘记,与IPv4不同,IPv6不受NAT限制,这意味着如果支持,您通过IPv6获得良好连接的可能性要大于IPv4.
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |