提醒的話是推送給負(fù)責(zé)人的,告訴他哪些用戶的訂單超時(shí)了。不是推給用戶。之前想用輪詢做但是被boss駁回了
定時(shí)器和長連接是不沖突,可以一起用的。
我們有類似的業(yè)務(wù),用的是workerman的web-msg-sender,直接調(diào)用curl就推送過去了,賊簡單。
用crontab 運(yùn)行php腳本,每分鐘跑一次數(shù)據(jù)庫,超時(shí)的直接curl調(diào)用 web-msg-sender推過去
參考思路:
首先定時(shí)器和長連接確實(shí)沒什么直接的關(guān)系,根據(jù)你描述的場景,至少有兩個(gè)關(guān)注點(diǎn):
1、提醒是發(fā)給負(fù)責(zé)人的,那么也沒有維持長連接的必要,雖說負(fù)責(zé)人可能數(shù)量不多,畢竟占著長連接資源也是對資源的消耗,執(zhí)行調(diào)度時(shí)直接發(fā)給負(fù)責(zé)人即可,不過這也得看你們具體通知方式。
2、數(shù)據(jù)量比較大,定時(shí)輪詢數(shù)據(jù)庫性能肯定低下, 可以考慮使用redis的 zset 來搞, 比如score用訂單的時(shí)間來權(quán)重,時(shí)間由近及遠(yuǎn)掃描,這樣可以保證每個(gè)訂單只需掃描一次,也可以避免反復(fù)輪詢數(shù)據(jù)庫【另外還可以擴(kuò)展思路,比如配合多進(jìn)程,并行的處理多個(gè)切分的 zset】。