用于实现实时聊天应用程序的推送通知与 Web 套接字?

Posted

技术标签:

【中文标题】用于实现实时聊天应用程序的推送通知与 Web 套接字?【英文标题】:Push Notification vs. Web Sockets for implementing a real-time chat app? 【发布时间】:2014-05-09 08:04:24 【问题描述】:

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

当它关闭时,我可以使用 APNS 等原生推送通知服务,当应用程序打开时,我可以运行自己的 websockets 服务器或使用 PubNub 或 Pusher 等 3rd 方提供商,这实际上是我一直在做的.

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

【问题讨论】:

【参考方案1】:

APNS 并非 100% 可靠。在大多数情况下是这样,但不是 100%。它也没有您提供的专门服务那么快。有时,推送消息需要一分钟以上才能到达。您需要考虑这些并在您提出的任何设计中将其考虑在内。如果您能忍受这些限制,您确实可以依靠 APNS 来更新您的客户端。此外,在 ios7 中,应用程序可以在后台唤醒、检索数据并更新其 UI,以便向用户呈现最新的应用程序。

在谈到性能时,能够处理大量打开的连接并同时为它们提供服务并不像听起来那么简单,因此根据您的资源,您可能无法提供比 Apple 的 APNS 更好的服务正常运行时间,因此上述限制虽然是正确的,但并不一定像听起来那么糟糕。

我认为最好的办法是,因为无论如何您都需要实施推送支持,所以只实施 APNS,看看这是否让您和您的客户满意。请记住,沙盒(调试)APNS 服务器比普通生产 APNS 服务器慢,因此请使用发布版本进行测试,以了解仅使用 APNS 对性能的真正影响。如果以后您发现提供的服务还不够,您只能实施进一步的服务。

【讨论】:

非常感谢。我什至不知道沙盒 APNS 应该很慢,并且想知道我的连接出了什么问题!您知道这种 APNS 方法是否是大多数消息传递应用程序(如 Whatsapp、Line、微信等)采用的方法吗? @Vlad WhatsApp 和 FB Messenger 在应用程序处于活动状态时同时支持 APNS 和某种连接。我认为他们通过长时间运行的后台任务扩展了这种联系。一旦应用程序在后台运行的时间足够长,它们就会单独依赖 APNS。 Skype 刚刚添加了推送支持,并且只依赖于它自己的内部连接。这些是我唯一使用的,所以不确定其他的。

以上是关于用于实现实时聊天应用程序的推送通知与 Web 套接字?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 android 聊天与推送通知,如 Whatsapp

推送通知可以代替 web-socket 吗?

Cometd vs ActiveMQ 用于实时 Web 应用程序的服务器端推送

MQTT 用于聊天应用程序中的客户端通信

Zend 2 网络套接字

聊天应用程序的 Firebase 推送通知