今天实现一个功能,就是设置一个时间来发一个提醒给用户:
首先一开始我是打算这样做:
go func() {
t1 := wtf.Time(arg.Stime)//t1为前端传来的开始时间
t2 :=time.Now()
time.Sleep(t1.Sub(t2))
}()
开启一个线程,计算当前创建提醒的时间与提醒的开始时间的差值,通过差值先sleep掉线程,到时间再wake up
然后发现假如服务器关闭了的话,这个线程就gg,这样做还是会出现很多bug
所以我打算用另外一个方法:
//把时间字符串格式化成相同的时间类型
t1, err1 := time.Parse("2006-01-02 15:04:05", times)//times为前端传来的时间
t2, err2 := time.Parse("2006-01-02 15:04:05", b)//b为库里面查到的待处理的提醒的时间
if err2 == nil && err1 == nil && t2.Before(t1) {
//如果t2比t1小,则立刻执行,发送提醒给用户
}
前端每隔5秒就发来一次请求,如果发来的时间走到了待处理的提醒的时间,就立刻执行,发送提醒给用户