首页 文章

使用Google Cloud Messaging推送通知的Android p2p文件传输

提问于
浏览
0

我有一个问题,经过数小时的研究,我甚至无法开始解决 . 我需要使用GCM来促进对等文件传输(文件大小大约为1.5兆字节的JPEG图像是特定的) .

客户端A打开一个套接字并使用AirBOP通知客户端B它想要发送图片并给出B相关信息(我想使用的是IP地址端口,短暂的) . B然后连接到A并下载图片 . 所有这些都在NAT背后,并且如果可能的话通过3G / 4G . 没有涉及服务器 .

我查看了TTorrent,Snark,Cling,NAT打孔,PWnat等但我仍然不知道如何实现上述目标,如果可能的话 . 我所理解的是我将需要使用端口映射或UPNP .

对不起英语不好,我正在寻找解决上述问题的路线图/指南/图书馆/现有教程/项目 .

谢谢 .

1 回答

  • 2

    1)Google Cloud Messaging(GCM)并非旨在提供大型有效负载 . 它的目的是为您的应用程序提供轻量级消息,然后处理繁重的工作(例如,新的电子邮件通知通知您的应用程序已过期并且应该检索新的电子邮件) . 尽管如此,它确实能够承载高达4Kb的有效载荷 . 这显然不足以处理1.5Mb的有效载荷 . 您可能会考虑实现某种类型的协议,该协议将在x个GCM消息之后组合完整的有效负载 . 首先,每个IP地址每天允许的GCM请求数量有一个配额 . 其次,GCM显然不希望以这种方式使用其服务,并且如果检测到GCM消息正在以这种方式使用,它将阻止GCM消息 . 有关更多信息,请参阅http://developer.android.com/google/gcm/adv.html .

    2)实现p2p应用程序所需的是STUN服务器或TURN服务器 . STUN服务器用于发现设备用于与Internet通信的公共IP和端口 . 您可以实现自己的STUN服务器,但需要一个可从两个对等方公共访问/路由的服务器,或者使用公共STUN服务器并使用GCM通知其他公共IP和端口的其他对等方 . 这种技术的一个主要限制是,如果其中一个设备位于已配置为使用对称定位的路由器/ NAT后面,则它将无法通过 . 这有例外,但通常是这种情况 . 使用TURN服务器基本上只是通过中央/公共服务器将数据从一个对等体转发到另一个对等体 . 这不是一个挑战,除非它会花费你,因为这种类型的解决方案会给服务器带来沉重的负担,而不是STUN服务器,你可能需要购买几台服务器来处理你的用户负载 .

    3)我正处于我自己的p2p项目中,我发现Verizon实现了Port-retricted cone nat,AT&T对称锥形nat,Sprint对称锥形nat . 考虑到移动运营商的普及(Verizon#1,At&t#2,Sprint#3),需要考虑这一点 .

    STUN协议http://tools.ietf.org/html/rfc5389

相关问题