workerman发布v5版本

walkor

新年的第一天,Workerman v5 正式发布!这是一个全新的里程碑,凝聚了贡献者们无数的心血与智慧。感谢每一位为 Workerman 贡献代码、提出建议、反馈问题的开发者,是你们让这个项目不断成长、完善。

v5 的发布标志着性能与稳定性的进一步提升,协程的引入也为开发者们带来了更多可能性。未来,我们将继续携手,共同推动 Workerman 的发展,为更多开发者提供强大的工具与支持。

主要特性

  • 支持Fiber协程
  • 支持Swoole协程
  • 支持Swow协程

注意
同一个Worker中Fiber协程、Swoole协程、Swow协程无法共存,只能使用其中一种。
不同Worker可以设置不同的协程驱动类型

Fiber协程

composer require revolt/event-loop ^1.0.0
<?php
use Workerman\Connection\TcpConnection;
use Workerman\Events\Revolt;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Revolt::class;
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $connection->send('hello workerman');
};

Worker::runAll();

Swoole协程

安装Swoole

测试代码

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class;
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $connection->send('hello workerman');
};

Worker::runAll();

Swow协程

安装Swow

测试代码

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Events\Swow;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swow::class;
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $connection->send('hello workerman');
};

Worker::runAll();

不兼容的变更

websocket协议onWebSocketConnect事件

$worker = new Worker('websocket://0.0.0.0:2345');
$worker->onWebSocketConnect = function (TcpConnection $connection, Request $request) {
    //  不再支持 $_GET $_SERVER 获取参数,统一使用$request获取参数
    $token = $request->get('token');
};

新增接口

  • Timer::public static function repeat($time, $callback, $args) 一次性定时器
    相当于 Timer::add($time, $callback, $args, false)

  • Timer::repeat($time, $callback, $args) 连续性定时器
    相当于 Timer::add($time, $callback, $args)

协程优点

PHP引入协程后最大的作用就是可以用同步的方式编写异步代码,避免了回调地狱,提高了代码的可读性和可维护性。
引入协程后可以让应用有更好的弹性,尤其在慢IO的情况下,能大幅提升应用性能。

协程缺点

但是引入协程后开发者需要时刻注意全局变量污染、资源竞争、第三方库改造等问题,开发维护成本增大,心智负担明显增加。

引入协程后产生了协程创建、调度、销毁、连接池等额外开销。
不管通过swoole自己的压测还是workerman的压测,在充分利用资源的情况下,引入协程后性能比阻塞式IO,MySQL单查询极限性能下降约5%-15%左右,PgSQL单查询性能下降更多。
截图

数据来源 techempower

尽管使用协程极限性能会下降,但是协程在慢IO的业务下会大幅度提高吞吐率。

2130 35 10
35个回答

Noah

workerman 2025!更上一层楼!

  • 暂无评论
小天天天天

加油!

  • 暂无评论
saithink

太强了

  • 暂无评论
Jason X

新年第一桩喜事,祝webman越来越强大!!!

  • 暂无评论
liziyu

加油2025

  • 暂无评论
Jinson

赞👍

  • 暂无评论
zhizun

前排支持!!!

  • 暂无评论
tanhongbin

奥利给

  • 暂无评论
xiaoming

v4 会维护修复bug吗 有个最后时间吗

初试

加油2025

  • 暂无评论
初心by

workerman 威武

  • 暂无评论
toooooop

点赞

  • 暂无评论
ak47f16200

厉害了,加油!

  • 暂无评论
liudada1204

workerman 威武,2025越来越好!

  • 暂无评论
hunma

workerman 越来越好

  • 暂无评论

如果使用Revolt作为驱动,创建携程操作是不是就可以使用Revolt\EventLoop::defer

isle

6666666666666666

  • 暂无评论
小吴大大

赞赞赞

indesigncs

请问有详细的说明文档吗?
是不是可以这么理解:
只要升级到5.0,然后 $worker->eventLoop = Swoole::class; 这样设置了,
整个系统就可以使用 swoole 中的协程了,例如:
go(function (){
//这里的逻辑就是在协程内运行了
});

wocall

老大V5

  • 暂无评论

支持V4可以无缝升级吗

  • 暂无评论
army

流鼻科纳斯

  • 暂无评论
moco

webman中可以使用协程嘛

  • walkor 12天前

    可以,不过用到数据库 redis 等需要参考swoole swow手册去操作

  • moco 12天前

    希望有案例就好了 祝webman越来越强大

  • walkor 12天前

    用法和swoole swow手册一样

  • liziyu 12天前

    希望swoole、swow等等,这些只做为可选项。相信有人跟我一要,用webman只要常驻内存即可,太复杂的不会用!哈哈

  • walkor 12天前

    本身就是可选项,只有在 config/process.php 里配置了eventLoop的进程才会启用。
    比如想开启一个task进程使用协程处理数据,在 config/process.php 新加一个task进程配置项,eventLoop 设置为 swoole 或者 swow,这样只有task进程开启了协程,其它进程维持原样。

  • moco 12天前

    希望老大在webman文档中更新一下 让更多的人知道怎么使用

  • walkor 12天前

    文档会慢慢补充

  • hunma 12天前

    大佬,想要revolt/event-loop的详细使用。swoole感觉太啰嗦了,这个方便点

  • rbb 7天前

wekyun

66666

  • 暂无评论
晚安。

祝webman越来越强大

  • 暂无评论
dengje

强,希望workerman越来越好,加油2025

  • 暂无评论
kinross

  • 暂无评论
windthesky

很好,希望有完整的使用教程

  • 暂无评论
龙腾

666

  • 暂无评论
深林孤鹰

V5!!!!!!

  • 暂无评论
德玛西亚

支持,希望webman越来越好。

  • 暂无评论
happy321

请问开启协程 是不是就是把之前的进程处理请求改为协程处理了?

phpcreeper

workerman大爱👍👍

  • 暂无评论
wzj177

老大,我composer里面安装5.0,Root composer.json requires workerman/workerman ^5.0, found workerman/workerman[v5.0.0-beta.1, ..., v5.0.0-rc.3] but it does not match your minimum-stability.
我的配置

    "require": {
        "php": ">=8.1",
        "workerman/workerman": "^5.0"
    },
筱洛洛

GatewayWorker什么时候支持workerman v5呢

  • 暂无评论
×
🔝