[置顶]Workerman发布5.1版本 Webman发布2.1版本,协程支持

walkor

Workerman发布5.1版本

  • 要求PHP>=8.1
  • 提供Workerman\Coroutine类,底层自动适配Swoole、Swow、Fiber协程
  • 提供协程相关的组件,例如 Context Channel Barrier Parallel WaitGroup Locker Pool等,底层自动适配Swoole、Swow、Fiber协程

workerman协程文档

Webman发布2.1版本

  • 要求PHP>=8.1
  • 依赖Workerman 5.1
  • 支持Workerman 5.1的协程及组件
  • 数据库、redis等库的改造

webman 2.1协程组件

webman v2.1 已经提供了以下组件,它们都集成了连接池,支持在协程和非协程环境下使用

注意事项

升级后不会自动使用协程,需要设置eventLoop才会开启协程,直接升级对业务没有影响。
如果有使用数据库 redis等组件,需要同步升级,参见升级到v2.1

相关文档

升级到v2.1
webman协程

最后

协程并非银弹,它有自己的局限性,引入协程会带来全局变量污染问题、资源竞争问题、调试困难问题。
从压测数据来看,在充分利用CPU的情况下,引入协程极限性能一般会下降10-20%。
但是在有慢IO业务中,引入协程确实会大幅度提升性能。

建议

  • 协程不是必须的
  • 旧项目不建议无脑开启协程,这有可能带来因全局变量污染问题导致的数据错乱
  • 新项目可以考虑使用协程,但是没有必要为了协程而使用协程
  • 旧项目遇到慢IO相关的业务可以考虑单独启动一组进程开启协程处理,参考webman协程与非协程混合部署
13054 35 13
35个回答

Tinywan

牛啊

Workerman[start.php] start in DEBUG mode
-------------------------------------------- WORKERMAN ---------------------------------------------
Workerman/5.1.0         PHP/8.2.10 (Jit off)          Linux/5.15.167.4-microsoft-standard-WSL2
--------------------------------------------- WORKERS ----------------------------------------------
event-loop  proto       user        worker      listen                 count       state            
event       tcp         root        webman      http://0.0.0.0:8201    24           [OK]            
event       tcp         root        monitor     none                   1            [OK]            
----------------------------------------------------------------------------------------------------
  • zh7314 2025-07-23

    开启jit会有 性能提升吗?

chaz6chez

👍!

  • 暂无评论
AnT2077

牛牛牛

  • 暂无评论
learner

给力!只要eventloop不配置就不会启用协程吧

  • 暂无评论
咸鱼不咸

升级升级

  • 暂无评论
Madman

这个必需顶!

  • 暂无评论
glitter

支持

  • 暂无评论
shanyi

棒呆~

  • 暂无评论
不败少龙

6666

  • 暂无评论
liziyu

🐂 Db

  • 暂无评论
xiaoming

十分强大
对心智要求还好

  • 暂无评论
qqxxr

  • 暂无评论
liudada1204

牛牛牛

  • 暂无评论
ccc

6666

  • 暂无评论
pengzhen

大佬,什么叫有慢io的业务?操作数据库,有redis请求,还有登录和支付需要调用第三方接口,这些算慢io吗?看文档,没有提供根据协程id获取协程上下文的方法,如果用的swoole驱动,协程里有协程,怎么获取父协程上下文

  • 暂无评论
hunma

帅,直接升级

  • 暂无评论
saithink

强的离谱!

  • 暂无评论
wocall

后面的几个小升级,对我来说都用不上😄

  • 暂无评论
phpcreeper

👍👍

sunsgne

使用MongoDB的时候必须再使用之前执行一次默认数据库的操作。不然会报错Error-Call to a member function connection() on null; 临时解决方案在support/bootstrap.php 里面初始化一下链接。简单分析原因应该是在数据库连接池哪一块可能忽略了对MongoDB的初始化

  • walkor 2025-02-21

    刚刚测试没问题

  • sunsgne 2025-02-24

    // 正常入库
    Db::connection('mongo')->table('channel_report_error_log')->insert(['time' => time()]);

    // 不能入库,报错Error-Call to a member function connection() on null; 如果再此行上面添加\support\Db::select('select 1');能正常入库
    ChannelReportErrorLog::query()->insert([
    'timestamp' => time(),
    ]);

Jason X

webman中process进程使用组件workerman/http-client,若想启用协程需要设置eventLoop不?

  • walkor 2025-02-25

    任何进程开启协程都需要设置eventLoop

  • Jason X 2025-02-25

    好的,前段时间用workerman5.0没设置也行,我升级下项目版本试试

  • Jason X 2025-02-26

    大佬,问下webman/redis-queue组件支持设置协程了不?

  • walkor 2025-02-26

    支持

  • Jason X 2025-02-26

    谢谢,我升版本测试看看

touer

2.1版本使用二进制还不支持swoole扩展吗?

  • walkor 2025-02-27

    二进制开启swoole后启动界面会出现乱码,目前还没时间定位。

  • touer 2025-02-27

    好的,

holly188

默默的变强!👍👍

  • 暂无评论
qq7467466

太牛了, 必须顶!

  • 暂无评论
会飞的鱼

牛逼

  • 暂无评论
dbyellow

🙌🙌🙌🙌🙌🙌

  • 暂无评论
timeless-zyg

厉害!厉害!

  • 暂无评论
white

Webman 2.1版本 二进制打包的有预期支持swoole拓展吗

  • walkor 2025-04-23

    之前就支持过了

  • white 2025-12-31

    walkor老大 这个支持有版本上的限制吗 我php版本是8.1.31的 升级到webman2.1版本后 eventLoop' => Workerman\Events\Swoole::class启用了Swoole 使用php start.php start 启用的完全正常可用 但是用了二进制打包后./webman.bin start启动的要一对乱码报错 如下: ./webman.bin start
    Workerman[webman.bin] start in DEBUG mode
    -------------------------------------------------- WORKERMAN --------------------------------------------------
    Workerman/5.1.6 PHP/8.1.31 (JIT off) Linux/4.4.0-19041-Microsoft
    --------------------------------------------------- WORKERS ---------------------------------------------------
    event-loop proto user worker listen count state
    swoole tcp root http-8787 http://0.0.0.0:8787 3 [OK]
    event tcp root monitor none 1 [OK]

    Press Ctrl+C to stop. Start success.
    OiBpۧ%S[SxmG(Ƞ< Ypq-HXc+��+tjmSҒ81b+0xn}'ch z3F(ag BIH|XLO(6-(D,$'<Ǟa:z  -<GcbY~{is��8? oį]Drp6k$;阧 +edH8L #RũIB 'L‰w=G,39bpZ!BJ{ZU *$}B^g rW! !-xfF%5 Yx*oFm ɛauaۙ _1nxd
    1nN3ơ|?
    HN;
    Ȁu H=��k?3HJNFQ=?"6I0w\HO1D=>̕��=wnw<BP<IZ} 9 ՟_$/; 8N _;HLn7 UDRBbFn(] ]Y MP/D+@ ״@]"g-Nn7To |^jE0Ĕ1H?I PdAf^M$s)j m= ,L,zȖd )L?)AR-up"BvHϐ"LbGy$ Vhw9I!韗f;Cv:t5lƋE~uA<AXMpڸ8}&, ֋nl@JDD' Cẁ麫:=AK8H?փH5&!|ŀ&$jC��a
    !M1݁↔oww?cP%f< yB'iZTkFEZ IB YEiu(2@ı1
    XX
    @Ht
    bR&>5-nj$;_)-_~p|;LQ[tgºoqD"M%v~g"`_SC%<6J(Gb;,<OFwHH3 <L4P@^vw#B 4TdZ tk~
    t
    u^mD>-@T>Ҷw_4PX! 7I( \@ 1I-_~0T,>Poɡ.P.B^ B.B(0B.8@H.B.PXB.Bhp%xȅ\^ȅ\FUӀ\B%++8גr8鄖 I)d_0"N&D~ 6_! }hI=AtyB3{ .*N6t;<h u+JZȄz%ucYIϹ ? PuC&-t 0)muhߞ_$XG@X_f6;0J��fE*1 >J$YrOzt (h$J)Աa 2_If )$%֟ +PL?^g[5o6 {!$pO G&@qxKv뵨/KRydu9Y& (yru! 3( (bEADu 4 M#vťA0é,0ZDWuEn iI$ -Hk˲tm$t.IUyR$uox(it#<uu*0 c11%=qUc iaO@?6ZQ28��
    \wI&~p3-#R"@%˜lҍz4by$u>cPRE8<hA@:ڀ-#KCt⠥KIUc7nS%?[YVwi=lL7(#/vf8Aa/<@{~YAf=TPv c-4= nVcw
    A֧KsMd9vҔ
    m
    H+NBR'~t>#D 7
    ^DH$2x;q i9){CL,n&v=7ZRV>Sg+yyWWBL!^F0M
    CkczpHs-ZR^ulaB -z!i xJ'B"
    P1yns6@ ]S%-XrZ��PRߝwѶj=Oŕڨ JJ--k n0! 0H##P%IufewyR?Uep>Fu1p $lZ 넴wGsus#wUM yvi{w]0#GY tC'K'ik4ׁ1ڈ'CKʚHt��3 5X- 1^ פ1PIJbj+(Gʆ#[)0p{կ~E@X;Usv=MI#z ZʆOk1q@;1؇ ĐR "(H/"LG8R7\4~yP4,X%% iCk?.o. :Ghz ] x^WƔ0D_qX7D8pu߶FvqF "oC4д,HHT!TrA)i)ON)pG_aSC)ikLI-2OlŅCXTi36<r<{?9weI)w
    OiBpۧ%S[SxmG(Ƞ< Ypq-HXc+��+tjmSҒ81b+0xn}'ch z3F(ag BIH|XLO(6-(D,$'<Ǟa:z  -<GcbY~{is��8? oį]Drp6k$;阧 +edH8L #RũIB 'L‰w=G,39bpZ!BJ{ZU *$}B^g rW! !-xfF%5 Yx*oFm ɛauaۙ _1nxd
    1nN3ơ|?
    HN;
    Ȁu H=��k?3HJNFQ=?"6I0w\HO1D=>̕��=wnw<BP<IZ} 9 ՟_$/; 8N _;HLn7 UDRBbFn(] ]Y MP/D+@ ״@]"g-Nn7To |^jE0Ĕ1H?I PdAf^M$s)j m= ,L,zȖd )L?)AR-up"BvHϐ"LbGy$ Vhw9I!韗f;Cv:t5lƋE~uA<AXMpڸ8}&, ֋nl@JDD' Cẁ麫:=AK8H?փH5&!|ŀ&$jC��a
    !M1݁↔oww?cP%f< yB'iZTkFEZ IB YEiu(2@ı1
    XX
    @Ht
    bR&>5-nj$;_)-_~p|;LQ[tgºoqD"M%v~g"`_SC%<6J(Gb;,<OFwHH3 <L4P@^vw#B 4TdZ tk~
    t
    u^mD>-@T>Ҷw_4PX! 7I( \@ 1I-_~0T,>Poɡ.P.B^ B.B(0B.8@H.B.PXB.Bhp%xȅ\^ȅ\FUӀ\B%++8גr8鄖 I)d_0"N&D~ 6_! }hI=AtyB3{ .*N6t;<h u+JZȄz%ucYIϹ ? PuC&-t 0)muhߞ_$XG@X_f6;0J��fE*1 >J$YrOzt (h$J)Աa 2_If )$%֟ +PL?^g[5o6 {!$pO G&@qxKv뵨/KRydu9Y& (yru! 3( (bEADu 4 M#vťA0é,0ZDWuEn iI$ -Hk˲tm$t.IUyR$uox(it#<uu*0 c11%=qUc iaO@?6ZQ28��
    \wI&~p3-#R"@%˜lҍz4by$u>cPRE8<hA@:ڀ-#KCt⠥KIUc7nS%?[YVwi=lL7(#/vf8Aa/<@{~YAf=TPv c-4= nVcw
    A֧KsMd9vҔ
    m
    H+NBR'~t>#D 7
    ^DH$2x;q i9){CL,n&v=7ZRV>Sg+yyWWBL!^F0M
    CkczpHs-ZR^ulaB -z!i xJ'B"
    P1yns6@ ]S%-XrZ��PRߝwѶj=Oŕڨ JJ--k n0! 0H##P%IufewyR?Uep>Fu1p $lZ 넴wGsus#wUM yvi{w]0#GY tC'K'ik4ׁ1ڈ'CKʚHt��3 5X- 1^ פ1PIJbj+(Gʆ#[)0p{կ~E@X;Usv=MI#z ZʆOk1q@;1؇ ĐR "(H/"LG8R7\4~yP4,X%% iCk?.o. :Ghz ] x^WƔ0D_qX7D8pu߶FvqF "oC4д,HHT!TrA)i)ON)pG_aSC)ikLI-2OlŅCXTi36<r<{?9weI)w
    OiBpۧ%S[SxmG(Ƞ< Ypq-HXc+��+tjmSҒ81b+0xn}'ch z3F(ag BIH|XLO(6-(D,$'<Ǟa:z  -<GcbY~{is��8? oį]Drp6k$;阧 +edH8L #RũIB 'L‰w=G,39bpZ!BJ{ZU *$}B^g rW! !-xfF%5 Yx*oFm ɛauaۙ _1nxd
    1nN3ơ|?
    HN;
    Ȁu H=��k?3HJNFQ=?"6I0w\HO1D=>̕��=wnw<BP<IZ} 9 ՟_$/; 8N _;HLn7 UDRBbFn(] ]Y MP/D+@ ״@]"g-Nn7To |^jE0Ĕ1H?I PdAf^M$s)j m= ,L,zȖd )L?)AR-up"BvHϐ"LbGy$ Vhw9I!韗f;Cv:t5lƋE~uA<AXMpڸ8}&, ֋nl@JDD' Cẁ麫:=AK8H?փH5&!|ŀ&$jC��a
    !M1݁↔oww?cP%f< yB'iZTkFEZ IB YEiu(2@ı1
    XX
    @Ht
    bR&>5-nj$;_)-_~p|;LQ[tgºoqD"M%v~g"`_SC%<6J(Gb;,<OFwHH3 <L4P@^vw#B 4TdZ tk~
    t
    u^mD>-@T>Ҷw_4PX! 7I( \@ 1I-_~0T,>Poɡ.P.B^ B.B(0B.8@H.B.PXB.Bhp%xȅ\^ȅ\FUӀ\B%++8גr8鄖 I)d_0"N&D~ 6_! }hI=AtyB3{ .*N6t;<h u+JZȄz%ucYIϹ ? PuC&-t 0)muhߞ_$XG@X_f6;0J��fE*1 >J$YrOzt (h$J)Աa 2_If )$%֟ +PL?^g[5o6 {!$pO G&@qxKv뵨/KRydu9Y& (yru! 3( (bEADu 4 M#vťA0é,0ZDWuEn iI$ -Hk˲tm$t.IUyR$uox(it#<uu*0 c11%=qUc iaO@?6ZQ28��
    \wI&~p3-#R"@%˜lҍz4by$u>cPRE8<hA@:ڀ-#KCt⠥KIUc7nS%?[YVwi=lL7(#/vf8Aa/<@{~YAf=TPv c-4= nVcw
    A֧KsMd9vҔ
    m
    H+NBR'~t>#D 7
    ^DH$2x;q i9){CL,n&v=7ZRV>Sg+yyWWBL!^F0M
    CkczpHs-ZR^ulaB -z!i xJ'B"
    P1yns6@ ]S%-XrZ��PRߝwѶj=Oŕڨ JJ--k n0! 0H##P%IufewyR?Uep>Fu1p $lZ 넴wGsus#wUM yvi{w]0#GY tC'K'ik4ׁ1ڈ'CKʚHt��3 5X- 1^ פ1PIJbj+(Gʆ#[)0p{կ~E@X;Usv=MI#z ZʆOk1q@;1؇ ĐR "(H/"LG8R7\4~yP4,X%% iCk?.o. :Ghz ] x^WƔ0D_qX7D8pu߶FvqF "oC4д,HHT!TrA)i)ON)pG_aSC)ikLI-2OlŅCXTi36<r<{?9weI)w
    AK'Id'sޔuuſ ��_пa8I4i[E^Qw)$Lr@'ATV'# ƉJ]ِp44>(muПMATPUTF:v,-E-ߐ@ȡ|NvdeB!sOaҤyk'@}M)85HY#9ȟSgmV6j ~pZh
    Njq0u×w5' N<zPnGI+MATPUTF:v,-E-ߐ@ȡ|NvdeB!sOaҤyk'@}M)85HY#9ȟSgmV6j ~pZh Njq0u×w5' N<zPnGI+MATPUTF:v,-E-ߐ@ȡ|NvdeB!sOaҤyk'@}M)85HY#9ȟSgmV6j ~pZh
    Njq0u×w5' N<zPnGI+`process error: class process\Http not exists
    process error: class process\Http not exists

  • white 2026-01-04

    walkor大佬 可以帮忙看看这个问题么

  • Tinywan 2026-01-04

    你这是服务器字体编码问题吧

  • Tinywan 2026-01-04

    你最新版本是多少 console

  • white 2026-01-04

    应该不是字体编码问题 我相同环境 我用没升级webman2.1的项目打包出的二进制可以正常跑 webman升级到2.1版本后 打包出来的二进制才会跑不起来

  • white 2026-01-04

    "webman/console": "^2.1", console是这个版本

  • Tinywan 2026-01-04

    小版本

  • white 2026-01-04

    "name": "webman/console",
    "version": "v2.1.10", 具体是2.1.10

  • Tinywan 2026-01-04

    webman/console (v2.1.11) 升级到最新版本看看

  • white 2026-01-04

    我按你说的console升到了2.1.11打出来的还是一样的报错

liwenshu

windows 支持吗大佬

  • 暂无评论
kingkong

windows启动之后请求页面一直加载,需要改代码才能打开网页截图

  • 暂无评论
Mr_Deng

截图
命令行里面不支持协程吗?

641221621

-------------------------------------------- WORKERMAN ---------------------------------------------
Workerman/5.1.3 PHP/8.4.12 (JIT on) Linux/5.15.0-43-generic
--------------------------------------------- WORKERS ----------------------------------------------
event-loop proto user worker listen count state
select tcp root webman http://0.0.0.0:8787 160 [OK]
select tcp root monitor none 1 [OK]

Press Ctrl+C to stop. Start success.
牛啊

minghui

牛牛牛

  • 暂无评论
gangpula32

webman还是很需要协程的,因为业务里数据库io多

  • 暂无评论
zz666

如果比较多耗时的http请求需要处理,一般的http请求都是5分钟以上,适合用协程吗

  • 暂无评论
🔝