在控制器里生成SnowFlakeId时,在高并发场景下还是会发生ID重复,需要传入$workerId参数可以避免,已知在process的onWorkerStart里可以得到$worker->id,那么在controller里,该怎么得到$worker对象呢?
var_dump(\Webman\App::worker()->id)
非常感谢🙏
用posix_getpid() 获得当前进程pid也行吧
谢谢。刚试了,\Webman\App::worker()->id得到10,而posix_getpid()得到29915,目前我用的snowflake接收datacenter范围0~31,接收workerid范围0~127
datacenter范围0~31,这个没问题 workerid范围不也是0-31吗,怎么你的是0-127呢?
借楼问下 有没有适用于webman的雪花算法库
composer "godruoyi/php-snowflake": "^2.0",
使用 $snowflake = new \Godruoyi\Snowflake\Snowflake; $snowflake->id();
godruoyi/php-snowflake如果直接使用的话,在同一毫秒内的并发请求会有重复结果,后来我用easyswoole/utility里的SnowFlake,用起来挺方便。https://www.easyswoole.com/Components/Help/snowFlake.html
感谢 最近也在使用雪花算法 需要在当前请求中,获取当前进程ID
请大神告知如何安装 或下载 easyswoole/utility里的SnowFlake ?
我是直接把 EasySwoole\Utility\SnowFlake这个文件拷贝出来的
EasySwoole\Utility\SnowFlake
composer require easyswoole/utility
$snowFlakeId = md5(uniqid(php_uname('n').getmypid(), true))
非常感谢🙏
用posix_getpid() 获得当前进程pid也行吧
谢谢。刚试了,\Webman\App::worker()->id得到10,而posix_getpid()得到29915,目前我用的snowflake接收datacenter范围0~31,接收workerid范围0~127
datacenter范围0~31,这个没问题
workerid范围不也是0-31吗,怎么你的是0-127呢?
借楼问下
有没有适用于webman的雪花算法库
composer
"godruoyi/php-snowflake": "^2.0",
使用
$snowflake = new \Godruoyi\Snowflake\Snowflake;
$snowflake->id();
godruoyi/php-snowflake如果直接使用的话,在同一毫秒内的并发请求会有重复结果,后来我用easyswoole/utility里的SnowFlake,用起来挺方便。https://www.easyswoole.com/Components/Help/snowFlake.html
感谢
最近也在使用雪花算法
需要在当前请求中,获取当前进程ID
请大神告知如何安装 或下载 easyswoole/utility里的SnowFlake ?
我是直接把
EasySwoole\Utility\SnowFlake
这个文件拷贝出来的composer require easyswoole/utility