Re: [請益] 幾個Plurk機器人的問題
※ 引述《kovenkoven (小沃)》之銘言:
: 大家好
: 由於最近對在嘗試寫Plurk的回訊機器人
: 在抓使用者的訊息去做特定功能的回訊沒有什麼太大的問題(如氣象、新聞等)
: 但是目前想新增功能卻愈到一瓶頸
: 我想在使用者發出關鍵字的噗之後才開啟回訊機器人進行動作
: 之後在回覆的地方抓使用者輸入的控制選項
: 例如A使用者發出了"呼叫OOO"的訊息
: 機器人會在該篇噗做出等待使用者下命令的訊息之後等待使用者的回覆
: 接著使用者可能會輸入"氣象"or"新聞"等等的訊息讓機器人做出相對應的事情
: 直到使用者發出"結束OOO"才停止函式
: 可是該怎麼做才能實現主程式持續抓時間河上的訊息且同時服務已呼叫機器人的使用者?
: 在win作業系統下有支援類似thread的功能嗎?
: 另外目前我所使用的方法是利用while搭配sleep讓它持續運作
: 有什麼方法可以讓我做個分頁,裡面有控制按鈕去讓他起動or停止嗎?
: 譬如利用while($key),讓我的按鈕可以去控制$key之類的
: 感謝各位^^
比較有效率的方法, 分成兩隻程式來跑
第一隻負責找最新的噗的關鍵字,找到之後把 plurk_id 存起來。
第二隻負責去撈初 plurk_id 來回應關鍵字
table scheme
id | plurk_id | start_time | hooked
pk 抓到的時間 TRUE/FALSE
在 fork 的同時把該筆 plurk_id 對應的欄位 hooked 設定為 FALSE
/*
先去撈資料庫的資料,
找出有幾筆 plurk_id 要回,
假設你撈出來的資料已經處理好像下面醬子
*/
$data = array(
array("plurk_id" => 1, "tpye" => '打掃', "hooked", FALSE),
array("plurk_id" => 2, "type" => '搥背', "hooked", FALSE),
array("plurk_id" => 3, "type" => '偷懶', "hooked", FALSE),
array("plurk_id" => 4, "type" => '喝茶', "hooked", FALSE),
);
$total_num = count($data);
for($i = 0; $i< $total_num; $i++)
{
$pid = pcntl_fork();
if($pid == -1)
exit('hey! orange.');
else if($pid)
{
echo "這邊可以把該筆 plurk_id 的資料標記為已經處理\n";
echo "製造出第 " . $data[$i]['plurk_id'] ." 個 child process\n";
/* "UPDATE xxx SET hooked = TRUE */
/* WHERE plurk_id = $data[$i]['plurk_id']"; */
}
else
break;
}
($pid) ? echo "bye\n" : test_case($data[$i]['plurk_id']);
function test_case($plurk_id)
{
echo "你目前在分析 $plurk_id 。\n";
}
exit();
沒有實際 run 過..不過寫法大概是醬子,
這種搭資料庫的寫法就和很多人一樣都有量大的煩惱,
所以在量大的時候或許會有些小問題, 但現在應該不用過早煩惱那些事情...
--
The Internet: where men are men, women are men, and children are FBI agents.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.104.63
推
03/27 03:24, , 1F
03/27 03:24, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章