新年的第一天,Workerman v5 正式发布!这是一个全新的里程碑,凝聚了贡献者们无数的心血与智慧。感谢每一位为 Workerman 贡献代码、提出建议、反馈问题的开发者,是你们让这个项目不断成长、完善。
v5 的发布标志着性能与稳定性的进一步提升,协程的引入也为开发者们带来了更多可能性。未来,我们将继续携手,共同推动 Workerman 的发展,为更多开发者提供强大的工具与支持。
注意
同一个Worker中Fiber协程、Swoole协程、Swow协程无法共存,只能使用其中一种。
不同Worker可以设置不同的协程驱动类型
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();
测试代码
<?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();
测试代码
<?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的业务下会大幅度提高吞吐率。
workerman 2025!更上一层楼!
加油!
太强了
新年第一桩喜事,祝webman越来越强大!!!
加油2025
赞👍
前排支持!!!
奥利给
v4 会维护修复bug吗 有个最后时间吗
v4 v5会一直并行维护,除非发布v6版本。
话说workerman怎么可能会有bug❓
牛
硬气!👍
666
赞!
加油2025
workerman 威武
点赞
厉害了,加油!
workerman 威武,2025越来越好!
workerman 越来越好
如果使用Revolt作为驱动,创建携程操作是不是就可以使用Revolt\EventLoop::defer
可以
厉害了
6666666666666666
赞赞赞
优秀,越来越好
请问有详细的说明文档吗?
是不是可以这么理解:
只要升级到5.0,然后 $worker->eventLoop = Swoole::class; 这样设置了,
整个系统就可以使用 swoole 中的协程了,例如:
go(function (){
//这里的逻辑就是在协程内运行了
});
对
吊炸天
老大V5
支持V4可以无缝升级吗
流鼻科纳斯
webman中可以使用协程嘛
可以,不过用到数据库 redis 等需要参考swoole swow手册去操作
希望有案例就好了 祝webman越来越强大
用法和swoole swow手册一样
希望swoole、swow等等,这些只做为可选项。相信有人跟我一要,用webman只要常驻内存即可,太复杂的不会用!哈哈
本身就是可选项,只有在 config/process.php 里配置了eventLoop的进程才会启用。
比如想开启一个task进程使用协程处理数据,在 config/process.php 新加一个task进程配置项,eventLoop 设置为 swoole 或者 swow,这样只有task进程开启了协程,其它进程维持原样。
希望老大在webman文档中更新一下 让更多的人知道怎么使用
文档会慢慢补充
大佬,想要revolt/event-loop的详细使用。swoole感觉太啰嗦了,这个方便点
牛
66666
祝webman越来越强大
强,希望workerman越来越好,加油2025
强
很好,希望有完整的使用教程
666
V5!!!!!!
支持,希望webman越来越好。
请问开启协程 是不是就是把之前的进程处理请求改为协程处理了?
no no no
workerman大爱👍👍
老大,我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.
我的配置
去掉composer代理
OK
GatewayWorker什么时候支持workerman v5呢