倒计时问题,12306订单倒计时

kleen 发布于 2016/12/21 14:21
阅读 500
收藏 1

 类似于 12306 我们下单之后, 就有45分钟付款的时间,如果超过这个订单就自动取消了。

我的业务场景是  

生成一个 任务{ 任务时间,任务状态,任务接收人}  推送给对应的用户,一直未执行任务,需要对这个任务接收人进行一个提醒。 


加载中
0
大洋的顶端
大洋的顶端

建议还是用第三方的推送,百度推送,极光推送、融云等等,并且文档和demo都比较齐。

因为涉及到复杂的业务和网络环境等问题

0
kakai
kakai

12306的订单倒计时应该是被动的,也就是说是客户端计算的,进入页面服务器会计算剩余时间,客户端计算到时后再去服务器验证一次时间,服务器验证时间如果确实到了或超过了就取消,没到就继续返回剩余的时间让客户端计算,再结合缓存框架一般都自带数据缓存生命期的机制,所以说12306处理这个不会在后端用定时器。

你的这个有个难点就是服务器负责推送,如果你能监控客户端行为,那客户端必然有某个程序一直在后台运行,这样的话也可以让客户端在收到服务器推送的任务后开始计时,到时后由客户端主动请求时间验证

kakai
kakai
回复 @kleen : 比如android,你表面看着这个app被关闭了,其实后台这个应用对应的一个服务是一直运行的,很难关闭,像病毒一样顽固,需要在“设置”、“运行的程序”当中手动强制关闭,过一会如果又死灰复燃就得重启手机了。
kakai
kakai
回复 @kleen : 如果你要的功能比较繁多,我也觉得一楼给你的推荐都挺不错的。
kakai
kakai
回复 @kleen : 像android的话,其实推送这块,android app几乎每款app都有一个后台程序负责处理推送,这个程序是一直运行的,除了那些不需要推送功能的app,这也是android比较卡顿的重要原因,如果你自己做就稍显复杂了;IOS的话是由苹果统一的一个后台进程处理所有的推送通知,不管多少个应用都只有一个
kleen
kleen
那假设 app 一直未开启,不就出问题了。
0
kakai
kakai
如果在后端做定时器,这个就比较复杂了,要考虑定时器集群、拓机恢复等为题,当然也是可以实现的,我猜测目前很多第三方推送应该是服务器有定时器的
0
甘蔗
甘蔗

1、服务器记录下单时间,并返回给客户端进行倒计时提醒(客户端计算,这里这是一个提示信息而已),如果客户端一直未关闭,则此倒计时提醒会一直到完成;

2、付款时验证下单时间是否超时,如果超时直接返回提示并取消订单,否则继续付款并修改订单状态。这是重点,因为不能依赖于客户端计时提醒;

3、后台一个总定时任务用来清理过期的订单(这里只要有一个定时任务就行了);

4、如果客户端重新打开,则获取一次服务器的订单剩余时间(当前时间减下单时间得出),并基于此时间开始倒计时;

5、如果客户端下单之后一直处于关闭状态,则该订单自然会由后台定时任务进行清理。

总的来说就是:利用客户端来进行倒计时提醒,交互时进行校验,后台定时清理。


返回顶部
顶部