我們的業(yè)務是用戶配置一個時間間隔,定時的去發(fā)送視頻,圖片,文字,
每個視頻發(fā)送需要有個五秒的間隔,圖片文字也是的。而且要求先發(fā)視頻,再發(fā)圖,再發(fā)文字。
請問這種怎么實現(xiàn)?
我目前的實現(xiàn)是定時器嵌套,實現(xiàn)的效果不是很理想,經(jīng)常出現(xiàn)先發(fā)文字的情況 ,請問這樣起定時器能夠控制先發(fā)視頻圖片的順序嗎?
代碼如下:
if(!empty($content['vedio']) && $content['vedio']){
$vedio = $content['vedio'];
$i = 0;
$count = count($vedio);
$timer_id = Timer::add(8, function()use(&$timer_id ,&$fromId, &$toId, &$vedio, &$i ,&$count)
{
$this->sendVideo($fromId, $toId, $vedio[$i]);
$i++;
if($i >= $count){
Timer::del($timer_id);
}
});
}
//圖片
if(!empty($content['pic_urls']) && $content['pic_urls']){
$pic_urls = $content['pic_urls'];
$i = 0;
$count = count($pic_urls);
$p_timer_id = Timer::add(5, function()use(&$p_timer_id ,&$fromId, &$toId, &$pic_urls, &$i ,&$count)
{
$this->sendImage($fromId, $toId, $pic_urls[$i]);
$i++;
if($i >= $count){
Timer::del($p_timer_id);
}
});
}
//文字
if(!empty($content['content']) && $content['content']){
$text = $content['content'];
$i = 0;
$count = count($text);
$t_timer_id = Timer::add(3, function()use(&$t_timer_id ,&$fromId, &$toId, &$text, &$i ,&$count)
{
$this->sendText($fromId, $toId, $text[$i]);
$i++;
if($i >= $count){
Timer::del($t_timer_id);
}
});
}
按照你的代碼,進程會先初始化三個定時器。視頻定時器(每8s執(zhí)行一次),圖片定時器(5s),文字定時器(3s),注意這三個定時器會在這段代碼執(zhí)行的時候一次都初始化,你可以通過打印每次的timer_id發(fā)現(xiàn),代碼執(zhí)行后三個定時器都是設置好了的。所以執(zhí)行順序就變成了3s后第一段文字,5s后第一張圖片,6s后第二段文字,8s后第一個視頻,9s后第三段文字,10s后第二張圖片。
所以分開設置定時器似乎是不能滿足需求的,可以把視頻+圖片+文字合起來作為一個組。每個定時器發(fā)送一組,這樣就有先后順序了。