Sep 12, 2018
·
1 min read
┤課前廢話├─────────────────────────────────
最近在幫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 <?php
02 $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