设计简单的推送通知系统

Posted

技术标签:

【中文标题】设计简单的推送通知系统【英文标题】:Designing Simple Push Notifications System 【发布时间】:2017-04-17 10:52:23 【问题描述】:

需要一些关于实施推送通知系统的设计建议。我使用后端 Symfony 3、Doctrine 和 postgres 作为数据库。通知系统将有两种类型的通知: 1. 即时通知 2. 预定通知 即时通知是在后端执行操作并立即推送通知时。例如,在数据库中删除用户时的通知。

计划通知用于尚未触发但将在未来某个已知时间触发的通知。只有到达设定的时间时才会触发通知。例如闹钟。

基于此,我设计了一些简单的表格,其中包含一些模拟数据:

因此,根据上述信息,API 概念是在用户的设备(例如手机)上,它将每 2 分钟运行一次 GET/notifications API。 API 将返回当前日期之前且尚未为该用户关闭的通知。例如,如果 USER2 以 2017 年 4 月 18 日的当前日期执行 GET/通知,它将返回记录 3。

我的问题是这种类型的设计是否可以接受,如果不是传统做法的话?此外,许多用户每 2 分钟运行一次相同的 GET API,是否有可能减慢系统速度?我猜最多有 3000 个用户。

最后,随着通知表中记录的增长,postgres 在执行此 API 时会变慢吗?

谁花时间阅读它,谢谢,我非常感谢任何建议。

【问题讨论】:

您好,我为 realclearpolitics.com 构建了浏览器推送通知系统如果您愿意,我可以指导您完成整个过程以及其中涉及的所有不同技术。 嗨,Abraham,是的,如果你能引导我完成它,那就太棒了! 这是一个漫长的解释过程,因为涉及此设置的所有不同细节。有什么比这些评论区更容易联系您的方式? 【参考方案1】:

推送通知。

如果您的客户端设备通过 GET API 调用请求通知,则它不称为推送通知。随着时间的推移,服务器端处理过多不必要的请求将会很繁重,因为所有用户可能都没有那么多通知。

您不应该让您的客户来电。您应该改为将通知推送到客户端。 iosandroid 应用程序可以配置为通过deviceIduuid 获取推送通知。向您的移动开发人员询问同样的情况。如今,甚至 html5 浏览器也支持推送通知。

用于存储:

我认为您根本不必将instant push notifications 存储在数据库中,除非您有存储日志的应用程序级别要求。

您应该只存储scheduled notifications,以便Cron job 可以在通知到期时选择并推送这些通知。

希望这会有所帮助!

【讨论】:

嗨 Jeet 这很有帮助。老实说,推送通知的概念对我来说是全新的。因此,根据您在 CRON 收到通知后推荐的内容,将其推送给用户的最佳方式是什么?例如,我需要使用像谷歌消息这样的服务还是在 Syfmony 中有一种简单的方法来做到这一点? 用于将通知推送到AndroidiOS 等应用程序。 GoogleApple 都有特定的 API。应用程序构建将生成一个appId,在应用程序安装后需要与服务器通信,GoogleApple 可以通过该Apple 将消息传递给相应的应用程序。移动应用程序开发人员更清楚这一点。我参与了几个项目,所以有一个基本的想法。

以上是关于设计简单的推送通知系统的主要内容,如果未能解决你的问题,请参考以下文章

一种设备到设备的推送通知系统

如何创建 php 表单并集成链接到 Telegram 或 Whatsapp 的推送通知系统?

我应该在通知系统中使用哪种设计模式?

PHP中的真实通知/推送通知系统

如何在应用程序中从系统推送通知设置跳转到个人推送通知设置?

系统通知,居然有人使用拉取?