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

Posted

技术标签:

【中文标题】推送通知可以代替 web-socket 吗?【英文标题】:Can the push-notifications replace web-socket? 【发布时间】:2018-09-27 22:59:13 【问题描述】:

我需要在 iosandroid 上开发一个具有实时功能的应用程序:应用程序用户需要定期实时共享代码,无需轮询。

我通常使用网络套接字来执行此操作,并且仅将推送通知用于向用户发送附加通知(当应用程序处于后台时)。因此,推送通知对应用程序逻辑没有影响(这是一个优点)。

我的疑问是,我可以用 Firebase 推送通知(用于接收)+ Rest API(用于发送)完全取代 web-socket 通信吗? 推送通知是否足够可靠?

一般来说,推送通知可以代替 websocket 来实现应用程序逻辑吗?

解决方案 1(网络套接字 + 推送通知)

User A -> App (websocket) -> Server (web socket + push-notification) -> App -> User B

用户 A

解决方案 2(推送通知 + REST API)

用户 A -> 应用程序(rest-api)-> 服务器(推送通知)-> 应用程序 -> 用户 B

用户 A

【问题讨论】:

我对同样的概念非常感兴趣。你试过了吗?我想推送通知的“唯一”失败将是事实,它们不是实时的,但允许一些滞后 【参考方案1】:

事实上这是可能的。但是这个选择有几个严重的缺陷:

首先,推送通知需要用户权限,如果用户阻止了推送通知,您将被阻止(在您的示例中,这意味着您的 RestApi 最多将停止工作)并且很难更改此选择以普通用户,用户应该去浏览器设置...等

浏览器对WebPush 的支持远小于WebSocket

您的服务器和客户端之间可能存在延迟,因为此类调用的 CallStack 远远超过正常的 WebSocket 连接。非常粗略的方案:YourServer -> PushServer(如 Firebase 推送通知)-> 客户端 每一步都有很多检查。

【讨论】:

以上是关于推送通知可以代替 web-socket 吗?的主要内容,如果未能解决你的问题,请参考以下文章

向所有客户端发送推送通知?

iOS 推送通知系统服务器

如何不向不想接收推送的用户发送FCM?

我们可以控制推送通知的“允许推送通知”对话框 ios 吗?

Ionic 可以在没有推送服务的情况下接收推送通知吗?

我们可以使用云发布/订阅接收多个用户到同一推送端点的 gmail 推送通知吗