每当添加新事件时,都会向用户发送推送通知。如果在行中添加了10个事件,则会向用户发送10个推送通知,这将是一种恼人的行为。
我希望这样做:如果连续添加了10个事件,或者在时间上彼此相距很近,只会向每个用户发送一个推送通知,上面写着:"#{event.name} and 19 others events added that match your interests."
。
以下是我迄今所做的工作:
在last_sent_notification
表中添加了一个字段users
。每次添加新事件时,都会检查创建的事件不在last_sent_notification
的2分钟半径内,并触发通知。
如果一个新创建的事件位于last_sent_notification
的2分钟半径内,则会创建一个后台作业,该作业将等待任何其他即将到来的事件,并在2分钟后触发。如果在2分钟等待期间创建了一个新事件,则通知将考虑到在该2分钟等待期间创建的所有事件。
此问题的唯一缺点是:随着事件的添加,通知将不会立即发送。会有2分钟的延误。
是否有任何设计模式或最佳解决方案可以更好地完成这项工作?
发布于 2016-04-21 03:38:15
对于您来说,使用可折叠消息要简单得多,因为它就是为这种场景而设计的。
可折叠消息是一种消息,如果该消息尚未传递到设备,则可以由包含相同折叠键的新消息替换。
您所需要做的就是设置collapse_key
参数。
如果这不是您真正想要的,那么您正在寻找的是一个队列和发送机制。这种事很容易用红葡萄酒来做。您当前的服务器端应用程序只是将GCM通知推送到redis队列中。如果已经有给给定用户的消息,则将替换该消息。
然后,您需要有另一个线程来不断监视redis队列,并发送超过n分钟的消息。
https://stackoverflow.com/questions/36768290
复制相似问题