如何实现不定时向客户端发送通知

客户端发起一个请求到服务器,服务器处理后需要在n秒时发送一个通知给客户端,然后在0-n秒之间,客户端可能有新的请求过来,这时候n秒发送通知可能就变成了在m秒的时候发通知。
举个例子:顾客点完菜下单后,10分钟菜没有上齐,需要通知到厨房提示某桌加急,但是在5分钟的时候客户按了暂停,6分钟时又恢复了计时,此时10分钟时不需要再提示加急,需要在11分钟时提示加急。

有什么办法可以比较好的实现这个功能。同时在同一秒时可能会有很多桌顾客进行了该操作,如何能保证时间到时所有桌位的消息都能准时发出

思路

  • 通过在数据库中记录所有桌位要发通知的时间,每秒轮序获取所有要发的消息
  • laravel自带的广播系统看起来很适合该需求,但是我看文档上没有提到如何发通知到安卓或者ios客户端,不知道有没有办法可以实现
    另外有没有别的更好的实现方式,希望大家可以提供些思路

补充

我想解决的问题不是如何推送客户端的问题,是想知道,在发送通知的时间是动态的且同一秒可能会有很多条消息,如何能同时发出,且性能也比较理想。
现在的思路就是每次请求到达服务器后计算出要发出的时间,放入延时队列,同时设置一个type为true,队列执行时需要满足type是true时才发送消息。当过程中时间发生变化,比如暂停,修改type为false,则时间到时之前的队列不执行,重新恢复计时后再修改回type为true,添加新的队列。

不知道还有没有别的更好的实现方式,另外想问一下 laravel自带的广播我看是和web之间通信的,那如果我想和安卓或者ios之间通信能用这个吗?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 8

既然你这个下单和暂停都是客户端操作的,为什么不直接在客户端做定时器?

1年前 评论

简单一点就是定时任务隔两秒就去表里获取当前需要发消息的桌号 然后扔到消息队列让消息队列去发消息,暂停再次启动后需要重新计算发消息时间。但这里我觉得需要考虑下多次暂停启动的操作,以及后续如果需要展示出一个桌子的操作时间轴这些需求扩展的问题。

1年前 评论

你不知道有个东西叫 pusher 吗?

客户端用这个 www.jiguang.cn/

1年前 评论

如果客户在 5 分钟的时候按了暂停,快到 10 分钟又恢复了计时,那不是 15 分才会发送通知?不太懂这个暂停是什么用意?

1年前 评论
zed11111 (楼主) 1年前

如果项目比较小而简单,我建议你不要搞复杂了,就简单点搞。 用SSE来推送,开发成本很低,发送任务记录到表,如果顶不住,再考虑记录到redis。

1年前 评论
陈先生

队列可以无限期的续期。

1年前 评论

队列里面判断是否发送通知就好了,如果不需要发通知或者需要延时发送,重新生成一条队列。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!