webman在controller里如何得到workerId

cqqjj1029

在控制器里生成SnowFlakeId时,在高并发场景下还是会发生ID重复,需要传入$workerId参数可以避免,已知在process的onWorkerStart里可以得到$worker->id,那么在controller里,该怎么得到$worker对象呢?

1593 4 1
4个回答

banro512
var_dump(\Webman\App::worker()->id)
静默

用posix_getpid() 获得当前进程pid也行吧

  • cqqjj1029 2022-04-12

    谢谢。刚试了,\Webman\App::worker()->id得到10,而posix_getpid()得到29915,目前我用的snowflake接收datacenter范围0~31,接收workerid范围0~127

  • evilk 2022-05-05

    datacenter范围0~31,这个没问题
    workerid范围不也是0-31吗,怎么你的是0-127呢?

evilk

借楼问下
有没有适用于webman的雪花算法库

  • xuehuli8210 2022-04-12

    composer
    "godruoyi/php-snowflake": "^2.0",

    使用
    $snowflake = new \Godruoyi\Snowflake\Snowflake;
    $snowflake->id();

  • cqqjj1029 2022-04-13

    godruoyi/php-snowflake如果直接使用的话,在同一毫秒内的并发请求会有重复结果,后来我用easyswoole/utility里的SnowFlake,用起来挺方便。https://www.easyswoole.com/Components/Help/snowFlake.html

  • evilk 2022-05-05

    感谢
    最近也在使用雪花算法
    需要在当前请求中,获取当前进程ID

  • andyzu 2022-05-06

    请大神告知如何安装 或下载 easyswoole/utility里的SnowFlake ?

  • evilk 2022-05-06

    我是直接把 EasySwoole\Utility\SnowFlake这个文件拷贝出来的

  • cqqjj1029 2022-05-07

    composer require easyswoole/utility

liziyu

$snowFlakeId = md5(uniqid(php_uname('n').getmypid(), true))

  • 暂无评论
年代过于久远,无法发表回答
×
🔝