如果是前段進(jìn)行倒計(jì)時(shí)觸發(fā),所有在線用戶都會(huì)發(fā)送向后端發(fā)送消息,而后端倒計(jì)時(shí)觸發(fā)則直接推送,不需要用戶前段發(fā)送消息,這個(gè)具體怎么做?
不了解為何有這種需求
前端定時(shí)吧,簡(jiǎn)單,不容易出錯(cuò)
我的需求是這樣,有一個(gè)房間,房主和其他人多個(gè)人,房主創(chuàng)建這個(gè)房間的有效時(shí)間為30分鐘,當(dāng)30分鐘后,關(guān)閉整個(gè)房間,發(fā)送消息給在線的人,說(shuō)該房間已過期。
如果用前段定時(shí)器,并且這些人都在線,究竟是誰(shuí)去向后端發(fā)送消息,如果這些人同時(shí)發(fā)送不是重復(fù)發(fā)送消息了么?求解答
我的需求是這樣,有一個(gè)房間,房主和其他人多個(gè)人,房主創(chuàng)建這個(gè)房間的有效時(shí)間為30分鐘,當(dāng)30分鐘后,關(guān)閉整個(gè)房間,發(fā)送消息給在線的人,說(shuō)該房間已過期。
如果用前段定時(shí)器,并且這些人都在線,究竟是誰(shuí)去向后端發(fā)送消息,如果這些人同時(shí)發(fā)送不是重復(fù)發(fā)送消息了么?求解答
下次提問可以像這樣把應(yīng)用場(chǎng)景說(shuō)下,不同的場(chǎng)景,不同的做法,不說(shuō)需求場(chǎng)景真不好回答。
這種情況應(yīng)該服務(wù)端計(jì)時(shí),在創(chuàng)建房間的時(shí)候設(shè)置一個(gè)定時(shí)任務(wù),偽代碼如下
\Man\Core\Lib\Task::add(30*60,
function () use ($room_id){
// 獲取所有該$room_id房間的client_id, get_client_id_arr是你自己的函數(shù)
$all_client_id_array = get_client_id_arr($room_id);
// 提示房間關(guān)閉的包
$close_room_message = json_encode(xxxxxx);
// 發(fā)送包
\Lib\Gateway::sendToAll($all_client_id_array, $close_room_message);
// 關(guān)閉所有客戶端連接
foreach($all_client_id_array as $client_id)
{
\Lib\Gateway::kickClient($client_id);
}
},
false
);
首先,謝謝walker你的回答
另外,補(bǔ)充說(shuō)明,場(chǎng)景:5人房間組隊(duì)打游戲,有人在房間內(nèi),有人在大廳,需求:有一個(gè)預(yù)定的開始時(shí)間,達(dá)到這個(gè)時(shí)間時(shí)向在線用戶提示“該隊(duì)伍已過期”,不論在房間內(nèi)的用戶或者是在大廳的用戶,都可以收到這條提示。
最后
1.你說(shuō)的服務(wù)端計(jì)時(shí)是如何計(jì)時(shí)的?
2.創(chuàng)建房間的時(shí)候設(shè)置一個(gè)定時(shí)任務(wù)我不太明白,如果我要做任務(wù)定時(shí)的話,我想我會(huì)在創(chuàng)建隊(duì)伍的時(shí)候可能會(huì)做一個(gè)倒計(jì)時(shí)定時(shí)器,假設(shè)是10點(diǎn)創(chuàng)建房間,10點(diǎn)10分過期,在創(chuàng)建隊(duì)伍時(shí)之后的10分鐘的最后一秒,執(zhí)行一項(xiàng)任務(wù),然后再向客戶端發(fā)送消息提示,我不知道我的理解與你的表述是否一致,我自己也在想方法。
再次感謝walker你多次的幫助,我覺得我也需要自己多想一想,不能遇到問題就不思考,謝謝。
看下這個(gè)函數(shù)\Man\Core\Lib\Task::add以及我給你貼的代碼
這個(gè)函數(shù)就是添加一個(gè)定時(shí)任務(wù),執(zhí)行時(shí)間間隔是第一個(gè)參數(shù),執(zhí)行的函數(shù)是第二個(gè)參數(shù),第三個(gè)參數(shù)代表是否執(zhí)行一次還是每隔第一個(gè)參數(shù)設(shè)定的時(shí)間不停的定時(shí)執(zhí)行
假設(shè)是10點(diǎn)創(chuàng)建房間,10點(diǎn)10分過期,在創(chuàng)建隊(duì)伍時(shí)之后的10分鐘的最后一秒,執(zhí)行一項(xiàng)任務(wù)
// 10分鐘(1060秒)后執(zhí)行
\Man\Core\Lib\Task::add(1060, function()
{
// message 是你的“該隊(duì)伍已過期”的消息, $client_id_array是發(fā)給哪些客戶端
Gateway::sendToAll($message, $client_id_array);
},
false // 只執(zhí)行一次填寫false
);