異步運行PHP任務我在一個有點大的Web應用程序上工作,后端主要是PHP。在代碼中有幾個地方我需要完成一些任務,但我不想讓用戶等待結果。例如,當創建一個新的帳戶,我需要給他們一個歡迎電子郵件。但是當他們按下“完成注冊”按鈕時,我不想讓他們等到電子郵件被實際發送之后,我只想啟動這個過程,并立即向用戶返回一條消息。到目前為止,在某些地方,我一直在使用與exec()類似的黑客攻擊?;旧鲜沁@樣做的:exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");這似乎有效,但我想知道是否有更好的方法。我正在考慮編寫一個在MySQL表中排隊任務的系統,以及一個單獨的長期運行的PHP腳本,該腳本每秒查詢該表一次,并執行它找到的任何新任務。如果需要的話,這樣做還可以讓我將來將任務分給幾臺工人機器。我在重新發明方向盤嗎?有比exec()黑客或MySQL隊列更好的解決方案嗎?
3 回答
largeQ
TA貢獻2039條經驗 獲得超8個贊
-這個答案是在2009年寫的,從那以后,GearMan看起來是一個很受歡迎的選擇,見下面的評論。 如果您想要一個完整的開放源碼消息隊列。 -這是一個非常酷的套接字庫,它可以輕松地編寫分布式代碼,而不必過于擔心套接字編程本身。您可以將它用于單個主機上的消息隊列?您只需讓您的webapp將某些內容推送到一個隊列中,在下一個合適的機會下,一個連續運行的控制臺應用程序就會使用該 -只在寫這個答案時找到了這個,但看起來很有趣 是一個基于PHP的消息隊列項目,但自2010年9月以來一直沒有得到積極維護 是最近(2017年)維護的針對各種隊列系統的包裝器。 最后,一篇關于使用
aluckdog
TA貢獻1847條經驗 獲得超7個贊
$socketcon = fsockopen($host, 80, $errno, $errstr, 10);if($socketcon) {
$socketdata = "GET $remote_house/script.php?parameters=... HTTP 1.1\r\nHost: $host\r\nConnection: Close\r\n\r\n";
fwrite($socketcon, $socketdata);
fclose($socketcon);}// repeat this with different parameters as often as you likeignore_user_abort(true);set_time_limit(0);
- 3 回答
- 0 關注
- 669 瀏覽
添加回答
舉報
0/150
提交
取消
