PHP由于是順序執(zhí)行的腳本語(yǔ)言,多線程編程困難示血,因此PHP的定時(shí)任務(wù)相比較JAVA 困難的多,使用Sleep會(huì)導(dǎo)致性能極差和系統(tǒng)資源損失救拉,下面我介紹一種高性能难审,又簡(jiǎn)單的方式來(lái)解決這個(gè)問(wèn)題。
步驟
- 編寫restful接口亿絮,可以用TP這樣的框架告喊,或者直接寫PHP文件,完成任務(wù)邏輯壹无。例如:
//使用TP框架建立restful接口
class OauthController extends Controller
{
/*
完成上課提醒
*/
public function classReminder()
{
//查看今天所有課程
$courses = D("course")->where(array("cday" => date("Y-m-d")))->select();
foreach ($courses as $course) {
$cstime = strtotime($course['cstime']);
$currtime = time();
$cc = $cstime - $currtime;
if ($cc < 60 * 60 && $cc > 5 * 60) {
$ucc = D("user_card_course")->where(array("courseid" => $course["id"]))->select();
foreach ($ucc as $uc) {
$re = D("wxmsg")->where(array("userid" => $uc["userid"], "courseid" => $course["id"], "type" => "上課提醒"))->find();
if ($re) {
echo "發(fā)送過(guò)了";
continue;
}
$user = D("oauth_user")->find($uc["userid"]);
$this->sendTemMsgForClassReminder($user["openid"], $course["id"], $uc["userid"]);
}
}
}
}
}
- linux添加定時(shí)任務(wù)葱绒,crontab -e 編輯任務(wù)
#每晚2點(diǎn)備份mysql
0 2 * * * /opt/mysqlBack/bkMysql.sh
#每15分鐘(每小時(shí)的 0 15 30 45 分啟動(dòng)),訪問(wèn)接口斗锭,并將日志輸出到log
*/15 * * * * wget http://localhost/classreminder >/opt/server/gmfitness-schedule/classreminder.log 2>&1
- wq地淀!保存。
成功岖是!