20

我正在研究为iPhone构建实时聊天应用程序(但此问题也适用于Android和其他设备)基本上我希望应用程序在打开时以及在关闭时收到实时消息,就像iPhone自己的“消息”应用程序。推送通知与Web套接字实现实时聊天应用程序?

当它关闭时,我可以使用像APNS这样的本地推送通知服务,当应用程序打开时,我可以运行自己的websockets服务器或使用PubNub或Pusher等第三方提供商,这正是我一直在做的其实。

然后我想知道:为什么我不能完全依靠APNS进行实时消息传递,无论是在应用程序打开并关闭时?这是一个更简洁的解决方案,因为它是由一台推送服务器驱动的。有人能启发我吗?谢谢。

回答

22

APNS不是100%可靠的。在大多数情况下,但不是100%。它也没有你提供的专门服务那么快。有时,推送消息需要一分钟以上才能到达。您需要考虑这些因素,并在您提出的任何设计中考虑这些因素。如果你能忍受这些限制,你确实可以依靠APNS来更新你的客户。此外,在iOS7中,应用程序可以在后台唤醒,检索数据并更新其用户界面,以便为用户提供最新的应用程序。在谈论性能时,能够处理多个开放连接并同时处理它们并不像听起来那么简单,所以根据您的资源,您可能无法提供比Apple的服务更好的正常运行时间APNS,所以上述限制虽然是正确的,但并不一定像听起来那么糟糕。

我认为最好的,因为你需要实施推送支持,只实施APNS,并看看这是否满足你和你的客户。请记住,沙箱(调试)APNS服务器比正常的生产APNS服务器慢,因此请使用发布版本进行测试,以查看仅启用APNS的实际性能影响。如果在路上你注意到所提供的服务还不够,你只能实施更多的服务。

+1

非常感谢。我甚至都不知道沙箱APNS应该很慢,并且想知道我的连接有什么问题!你知道这种APNS方法是多数消息应用程序(如Whatsapp,Line,Wechat等)采用的方法吗? – Vlad

+2

@Vlad WhatsApp和FB Messenger在应用程序处于活动状态时同时支持APNS和某种连接。我认为他们通过长时间运行的后台任务扩展了这种连接一旦该应用在后台运行足够长时间,它们就只能依靠APNS。 Skype最近增加了推送支持,只依靠自己的内部连接。这些是我使用的唯一的,所以不确定其他人。 –