【问题标题】:Can Firebase Messaging Service be a scalable replacement to websockets / server sent events?Firebase 消息服务能否成为 websockets/服务器发送事件的可扩展替代品?
【发布时间】:2020-05-13 03:29:33
【问题描述】:

我正在开发一个 web 应用程序,目前我的应用程序服务器使用服务器发送事件来保持与用户的连接,以便有效地将新消息和其他事件等内容推送给他们,而无需他们不断地轮询服务器来询问。

我正在寻找一种实现推送通知的方法,这样我就可以使用Notification Web API 在用户位于单独的选项卡中,或者当他们在手机上运行并且他们有Chrome 已最小化。

经过一些研究,Google Cloud Messaging 似乎已被 Firebase Cloud Messaging 取代,这是推荐用于传递推送通知的服务。看起来它的工作原理是让用户保持与 Firebase 服务器的持久连接,并且您的个人应用服务器向 Firebase 发布请求,以便它们传递给用户。

我的问题:这是否减轻了实现和维护 SSE / WebSocket 服务器的需要?我想知道我是否不能只通过 FireBase 转发我的所有事件,并通过他们的服务将它们传递给用户。也就是说,我会从 Firebase 发送两类消息:

一个是典型的“通知”,由用户解释(例如新消息),并且需要通知 API 的本地权限。然后另一种类型是不需要通知的其他“实时”更新(例如正在编辑的消息,或“用户正在输入消息”提示)

这种事情可能/推荐,还是我的理解在某些方面存在缺陷?

【问题讨论】:

  • 您能分享一下到目前为止的经验吗?我在实现 WebSockets 时遇到了麻烦,我想知道 FCM 是否可以很好地替代实时通知。我的意思不仅仅是通知弹出窗口,我想用它作为 WebSockets 的完全替代品
  • @Luciano 绝对使用 websockets。 FCM 的消息通常会出现很大的延迟(10 分钟)
  • @RyanPeschel 你是对的,我已经尝试过 FCM 并且时间响应是不可预测的,所以我不得不回到 websockets。至少 FCM 不是一个好的选择,不确定其他替代方案,例如 Pusher 或 Sockets.io 服务

标签: javascript android firebase web-applications websocket


【解决方案1】:

您所描述的一切似乎都超出了 FCM 的能力。

看起来它的工作原理是让用户保持与 Firebase 服务器的持久连接

其实不是“用户”。它是设备提供的消息传递基础设施。对于 Android,消息通过 Google Play 服务进行路由,该服务作为特权进程在后台运行。对于 iOS,消息通过 Apple 的 APNS。这些组件为其各自的服务维护一个开放的套接字,它们比应用程序自己管理套接字更有效,因为应用程序不能无限期地在后台管理套接字 - 操作系统一段时间后会关闭它。这意味着应用可以在消息发送后立即唤醒并接收消息。

【讨论】:

  • 有趣!你知道我可以在任何地方阅读更多关于此的信息吗?或者有什么我不知道的缺点吗?如果实施得当,这是否会继续在任何地方发挥作用和工作? (所有桌面浏览器、移动浏览器等)这似乎是一个很好的解决方案,因为它避免了维护自己的 websocket 服务器的需要,同时还允许您访问推送通知
  • 这些问题很笼统。唯一的公开信息是 FCM 文档中包含的内容。如果您想对 FCM 进行一般性讨论,我建议您发布到 Firebase subreddit。 reddit.com/r/Firebase
  • 好的,感谢您的链接。另外,你知道是否有办法区分消息类型吗?例如,如果有人刚刚编辑了一条消息或开始打字,我不希望用户的手机被唤醒。只有当有正确的Notification 时。基本上,我是否可以使用 FCM 传递所有事件,但只能通过通知唤醒手机?
  • 您可以将任何您想要的内容放入数据消息的有效负载中,并自行决定如何处理它。文档中对此进行了介绍。
猜你喜欢
  • 2014-07-17
  • 2015-08-08
  • 1970-01-01
  • 2012-12-22
  • 2020-09-06
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多