推送通知与Web Sockets在实现实时聊天应用方面的比较?

37

我正在研究为iPhone构建实时聊天应用程序(但这个问题也适用于Android和其他设备)。基本上,我希望该应用程序在打开时和关闭时都能接收实时消息,就像iPhone自己的“信息”应用程序一样。

当应用程序关闭时,我可以使用本地推送通知服务,如APNS,而当应用程序打开时,我可以运行自己的Websockets服务器或使用第三方提供商,如PubNub或Pusher,这实际上就是我一直在做的。

然后我想知道:为什么我不能完全依赖APNS进行实时消息传递,无论应用程序是打开还是关闭?由一个推送服务器驱动的解决方案感觉更加清晰。谁能启发我一下?谢谢。

1个回答

35

APNS并非百分之百可靠。在大多数情况下是可靠的,但不是百分之百。它也不如您提供的专用服务快。有时,推送消息需要超过一分钟才能到达。您需要考虑这些因素,并在设计任何方案时予以考虑。如果您可以接受这些限制,您确实可以依赖APNS来更新您的客户端。此外,使用iOS7,应用程序可以在后台唤醒、检索数据并更新其用户界面,使用户看到最新的应用程序。

谈及性能问题,要能够处理大量的开放连接并同时为它们提供服务并不像听起来那么简单,因此,根据您的资源,您可能无法提供比苹果APNS更好的服务 uptime,因此上述限制虽然正确,但并不一定像听起来那样糟糕。

我认为最好的方法是,既然您需要实现推送支持,只实现APNS,并查看是否满足您和您的客户。请记住,沙盒(调试)APNS服务器比正常生产APNS服务器慢,因此请使用发布版本进行测试,以了解仅使用APNS的实际性能影响。如果在今后发现所提供的服务不足,则可以仅实施其他服务。


2
非常感谢。我甚至不知道沙盒APNS应该是慢的,一直在想我的连接出了什么问题!你知道大多数消息应用程序(如Whatsapp、Line、Wechat等)是否采用这种APNS方法吗? - Vlad
3
@Vlad WhatsApp和FB Messenger都支持APNS并在应用程序活动时连接某种类型的服务。我认为它们通过长时间运行的后台任务来扩展这种连接。一旦应用程序在后台运行足够长的时间,它们仅依靠APNS。Skype最近才添加了推送支持,并仅依赖于其自己的内部连接。这些是我使用的唯一应用程序,所以不确定其他应用程序的情况。 - Léo Natan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接