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();
}
});
};
有一推送项目要产生随机数,发现在多个进程的情况下,每一次产生随机数都是一样的,,只有$consumer->count = 1才不一样
我这测试正常。可能和系统或者环境有关,还要看mt_rand的底层实现。
不过这个都和workerman无关,不是workerman的问题。
在Linux系统中开启多进程会出现无法随机数,我也刚遇到了这个问题,在找解决方法,Windows中无此问题(应该是Windows无法多进程)
老铁,问题找到了吗?我这也是这种情况,哈哈
可能是在主进程调用了mt_rand导致的,
子进程在onWorkerStart里调用下mt_srand随机播种试下
找到了解决办法,如果是用rand()取随机数,在rand前先执行srand(),如果用mt_rand()取随机数,就先执行mt_srand(),这样可以保证在Linux下多进程取出的随机数不一直重复。
注:srand()或mt_srand()不要用参数,原因不解释