function getNonceStr($length = 32)
{
$chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
$consumer->onWorkerStart = function($consumer)
{
\Workerman\Lib\Timer::add(0.5, function() use ($consumer){
while(1)
{
echo getNonceStr();
}
});
};
有一推送項(xiàng)目要產(chǎn)生隨機(jī)數(shù),發(fā)現(xiàn)在多個(gè)進(jìn)程的情況下,每一次產(chǎn)生隨機(jī)數(shù)都是一樣的,,只有$consumer->count = 1才不一樣
我這測(cè)試正常??赡芎拖到y(tǒng)或者環(huán)境有關(guān),還要看mt_rand的底層實(shí)現(xiàn)。
不過(guò)這個(gè)都和workerman無(wú)關(guān),不是workerman的問(wèn)題。
在Linux系統(tǒng)中開(kāi)啟多進(jìn)程會(huì)出現(xiàn)無(wú)法隨機(jī)數(shù),我也剛遇到了這個(gè)問(wèn)題,在找解決方法,Windows中無(wú)此問(wèn)題(應(yīng)該是Windows無(wú)法多進(jìn)程)
找到了解決辦法,如果是用rand()取隨機(jī)數(shù),在rand前先執(zhí)行srand(),如果用mt_rand()取隨機(jī)數(shù),就先執(zhí)行mt_srand(),這樣可以保證在Linux下多進(jìn)程取出的隨機(jī)數(shù)不一直重復(fù)。
?
注:srand()或mt_srand()不要用參數(shù),原因不解釋