大家好,希望大家能幫我分析一下。workerman如何依次間隔10秒把指令發(fā)給客戶端,指令是變量包括起始指令與結(jié)束指令,我如何在timer定時(shí)器中靈活運(yùn)用變量。舉例說明,我這有5個(gè)指令, 分別是 0001,0002,0003,0004,0005我打算把這五個(gè)指令依次間隔10秒發(fā)給客戶端,我把定時(shí)器寫for循環(huán)里面,所有指令會(huì)同一時(shí)間發(fā)給客戶端,會(huì)造成丟數(shù)據(jù)和疊包,這不是我想要的。我用到了sleep,但是這也不是我想要的。我該怎么做比較好呀?或者大家有沒有別的好辦法呀?
幾個(gè)定時(shí)器就搞定了啊
Timer::add(10, function() use ($connection) {
$connection->send('0001');
}, [], false);
Timer::add(20, function() use ($connection) {
$connection->send('0002');
}, [], false);
Timer::add(30, function() use ($connection) {
$connection->send('0003');
}, [], false);
Timer::add(40, function() use ($connection) {
$connection->send('0004');
}, [], false);
Timer::add(50, function() use ($connection) {
$connection->send('0005');
}, [], false);
大佬,您好,事情是這么回事,但我如何不用for循環(huán),依次找出這幾個(gè)變量呀?我只知道起始變量0001,結(jié)束變量0005,另外三個(gè)變量是每次遞增1得到的呀。
大佬您好:但是我的指令數(shù)是不固定的 ,有可能是5位,有可能7位,有可能是不同的兩位數(shù),我不可能每次都寫死指令吧。目前有三個(gè)變量,就是$length=5,$start=0001,$end=0005,0001到0005依次遞增1,直到$end==0005,最后一次發(fā)送。
for($i=1;$i<=5;$i++) {
Timer::add(10*$i, function() use ($connection, $i) {
$connection->send('000' . $i);
}, [], false);
}
大佬您好,只要用for循環(huán)就會(huì)同時(shí)發(fā)給客戶端的。我想到了用引用變量的方式,正在嘗試, 希望在send函數(shù)中能遞增1,當(dāng)?shù)扔?005后,停止調(diào)用。 不知道大佬在引用變量方便有啥好的建議?!颈?/p>
class Mail
{
// 注意,回調(diào)函數(shù)屬性必須是public
public function send($to, $content)
{
echo "send mail ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 10秒后發(fā)送一次郵件
$mail = new Mail();
$to = 'workerman@workerman.net';
$content = 'hello workerman';
Timer::add(10, array($mail, 'send'), array($to, $content), false);
};
// 運(yùn)行worker
Worker::runAll();
大佬 您的方案 我試過了 可是依然不行呀 我只能發(fā)送一個(gè)指令給客戶端后,收到客戶端返回的消息并把客戶端返回的消息存入數(shù)據(jù)庫,存入成功后再發(fā)下一條指令啦,依次發(fā)到0005,然后停止發(fā)送。關(guān)于我這個(gè)新想法,大佬有啥建議嗎?