┤課前廢話├─────────────────────────────────
最近在幫iBunny改寫核心,其中一項改變不是有關使用者體驗的方面,是與通訊軟體方
伺服器(下稱:Remote Server)進行通訊的程式要翻修。
目前Chat Bot的串接方式是利用設定webhook的方式,我們必須告知Remote Server在
Bunny Server上哪個位置是在接收消息的窗口,當使用者在APP上發出一條訊息Remote就
會把訊息、ID等等資訊包裝起來發送給Bunny。
以上不贅述。重點是目前處理方式是Bunny收到資訊後會先消化訊息→想怎麼回應→回
覆使用者→回應Remote說"200 OK!"。基本上在流量小、程式正確…等等最佳狀況下這樣
的方式是沒有問題的,但一旦有環節錯了,Remote跟Bunny的連線就會超時中斷,持續發
生的話Remote就會把Bunny當作壞了中斷串接。
┤課前簡介├─────────────────────────────────
一般在 unix-like 的作業系統下,要寫多程序程式一定會用到fork。在 PHP 裡也不例
外,若要在 PHP 中建一個子程序,要叫用 pcntl_fork()函式。
把pcntl_fork用在iBunny的話就是先請父程序回應Remote並關閉連線再叫子程序負責回
應使用者。
┤範例寫法├─────────────────────────────────
01
<?php02
$pid = pcntl_fork();03
if($pid == -1){04
die("Fork fail.");05
}else if($pid){06
//父程序07
echo "Father start...<br />";08
sleep(5);09
echo "Father end...<br />";10
exit;11
}else{12
//子程序13
for($i=1;$i<=3;$i++){14
echo "I am child ".$i."<br />";15
}16
exit;17
}18
?>┤輸出結果├─────────────────────────────────
Father srart...
I am child 1
I am child 2
I am child 3
Father end...
┤ 後記 ├─────────────────────────────────
父程序與子程序會各自執行,父子各自的exit;也不會互相影響。
範例中是子程序先結束,當然也可以運用成父先結束子繼續執行。
───────────────────────────────────────
--
※ 發信站: 大兔的神密世界(BunnyBBS.tk), 來自: 114.27.21.75※ 文章網址: https://www.bunnybbs.tk/article/M.1536762674.A.805※ Ricas:轉錄至某隱形看板 10/17 11:05