每当添加新事件时,就会向用户发送推送通知。如果在行中添加了十个事件,则会向用户发送十个推送通知,这将是令人讨厌的行为。
我想要这样:如果连续添加十个事件,或者在时间上彼此相邻添加十个事件,则只会向每个用户发送一个推送通知,说:"#{event.name} and 19 others events added that match your interests."
。
到目前为止,这是我所做的:
last_sent_notification
在users
表中添加了一个字段。每次添加新事件时,都会检查所创建的事件不在的2分钟半径内last_sent_notification
,并且会触发通知。
如果新创建的事件位于的2分钟半径内last_sent_notification
,则会创建一个后台作业,该后台作业将等待2分钟以等待其他任何即将发生的事件,并在2分钟后触发。如果在等待2分钟的过程中创建了新事件,则通知将考虑在等待2分钟的过程中创建的所有事件。
此问题的唯一缺点是:添加事件后,不会立即发送通知。会有2分钟的延迟。
是否有任何设计模式或最佳解决方案可以更好地完成这项工作?
使用Collapsible消息对您来说要简单得多,它是专门为这种情况而设计的。
可折叠消息是一条消息,如果尚未传递到设备,则可以用包含相同折叠键的新消息替换。
您需要做的就是设置collapse_key
参数。
如果这不是您真正想要的,那么您正在寻找的是队列和发送机制。使用redis可以很容易地完成这种事情。您当前的服务器端应用仅将GCM通知推送到Redis队列中。如果已有给定用户的消息,则将其替换。
然后,您需要另一个线程来不断监视redis队列并发送早于n分钟的消息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句