<分区>
据我所知,推送通知可以在应用程序上运行,因为客户端注册他们的设备并拥有唯一 ID,然后通知会通过持久连接(持续打开的连接)转发到该唯一 ID。换句话说,在 facebook 中,一个用户想向另一个用户发送消息,然后消息被发送到 facebook 上的中央服务器,然后从那里转发到 Apple 或 Google(或两者,我不知道) ,然后 Apple 或 Google 的服务器将消息转发给 ID 与发件人的 ID 相匹配的收件人。美好的。过程是:
发送方 > facebook 服务器 > Apple/Google > 接收方
如果应用程序本身为其客户组织了一个 VPN,比如 facebook 有自己的 VPN,那会怎样?那么,这样的消息是否可以通过以下形式的 VPN 上的路由立即从发送者发送到接收者:
发送者 > 接收者
此外,使用这种方法,客户端不必打开连接。例如,他们可以让服务器监听 VPN 上的端口,然后 VPN 中的消息路由必须通过 Facebook 服务器和底层电信基础设施进行处理,从而省略与 Apple 或 Google 服务器的通信。因此,与推送通知相比,这种方法似乎有两个优势:
这种方法的缺点是什么,它没有被使用,但我们有推送通知,它们都具有持久连接,并且需要与 Apple 或 Google 服务器通信,以便通知可以到达目的地?
最佳答案
VPN 并非用于此目的,但无论如何它们仍然是(客户端->VPNServer->客户端)以及客户端-服务器架构。
您想要的是 P2P,但当今的大多数用户(桌面和移动)都在 NAT 后面,因此如果没有正确和特定的 NAT 配置,就无法接收网络请求。
无论如何我可以考虑一些替代方案,但它们不会广泛使用。一个可以是:
客户端基于某个服务器,通过uPNP在与该服务器约定的端口为自己的局域网地址创建一个NAT条目。将打开与服务器通信的连接的客户端现在知道它可以直接打开到该地址和端口的连接。 (问题:不是所有的NAT都支持uPNP配置,一小部分用户甚至无法配置他们的NAT,因为他们无法访问它)
其他
NAT 在公共(public) IP 中的某些 TCP/IP 端口上监听新协议(protocol)。这个基于 TCP/IP 的协议(protocol)将通过隧道通信,通知 LAN 地址或稍后聚合的某些 session NAT 应该重定向数据包。 (问题:新协议(protocol),需要在NAT中实现,存在一定的安全隐患)
注意: NAT 很好。想象一个局域网中有 15 台计算机的地方。现在如果不存在 NAT,局域网中的所有计算机都需要一个不同的真实互联网 IP。互联网IP不便宜,所以成本会高很多,互联网IP饿死的速度会更快。
关于android - 为什么应用程序使用推送通知而不是 VPN(虚拟专用网络)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18872030/
相关文章:
java - 是否有一种轻量级的方法来获取上下文句柄以获取资源?
android - 按钮更改文本和 CircularProgressIndicator 之间的大小
Android区分App-In-Background和旋转事件
ios - 将 UIScrollView 添加到 CCSprite
ios - AFNetworking 查看错误代码 3840 的 JSON 内容
java - 如何获取默认网络适配器的主机广播地址? java
android - 制作 "slide from bottom"按钮(类似于snackbar)(Android)