众所周知,workerman是基于php cli的,由于php cli模式下无法使用php自带的header、sesion、cookie等函数,这导致将传统的php项目无法直接在workerman容器下直接运行。
我一度以为让传统业务在workerman中运行,就必须更改框架甚至业务代码以适配workerman,直到joanhey发了一个issue,打破了我的认知。
他们发布了一个名叫AdapterMan的项目,它可以做到不更改传统框架代码的情况下让你的传统php项目放到workerman中正常运行,并且他们公司已经在生产环境用了2年。
注意,是零代码改动直接让laravel、lumen、Slim等框架的项目在workerman上运行。
目前他们已经在laravel、lumen、Slim、Symfony、CakePHP、Yii2、KumbiaPHP 等做了初步压力测试,性能有很大的提升。
以下是压测结果
Laravel 8
Fw | Plaintext | Json | Single query | Multiple query | Updates | Fortunes |
---|---|---|---|---|---|---|
Laravel | 14,799 | 14,770 | 9,263 | 3,247 | 1,452 | 8,354 |
Laravel Roadrunner | 482 | 478 | 474 | 375 | 359 | 472 |
Laravel Swoole | 38,824 | 37,439 | 21,687 | 3,958 | 1,588 | 16,035 |
Laravel Laravel s | 54,617 | 49,372 | 23,677 | 2,917 | 1,255 | 16,696 |
Laravel Workerman | 103,004 | 99,891 | 46,001 | 5,828 | 1,666 | 27,158 |
Laravel with Workerman % gain | 596.02% | 576.31% | 396.61% | 79.489% | 14.738% | 225.09% |
Symfony 6
Fw | Plaintext | Json | Single query | Multiple query | Updates | Fortunes |
---|---|---|---|---|---|---|
Symfony | 38,231 | 37,557 | 12,578 | 10,741 | 3,420 | 10,741 |
Symfony Workerman | 210,796 | 197,059 | 107,050 | 13,401 | 4,062 | 71,092 |
Lumen 9
Fw | Plaintext | Json | Single query | Multiple query | Updates | Fortunes |
---|---|---|---|---|---|---|
Lumen | 18,998 | 18,616 | 10,791 | 3,496 | 1,461 | 9,223 |
Lumen Swoole | 44,861 | 43,598 | 24,255 | 4,178 | 1,599 | 16,854 |
Lumen Laravel s | 93,335 | 82,745 | 31,567 | 3,030 | 1,282 | 21,130 |
Lumen Workerman | 185,126 | 177,667 | 58,729 | 5,857 | 1,662 | 31,430 |
Slim with Workerman
Without ORM
Framework | JSON | 1-query | 20-query | Fortunes | Updates | Plaintext |
---|---|---|---|---|---|---|
Slim 4 | 38,305 | 34,272 | 12,579 | 32,634 | 2,097 | 35,251 |
Slim 4 Workerman | 129,393 | 81,889 | 15,803 | 73,212 | 2,456 | 134,531 |
Slim 4 Workerman pgsql * | 102,926 | 19,637 | 92,752 | 14,875 |
Lumen v9
接入代码类似
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Adapterman\Adapterman;
use Workerman\Worker;
Adapterman::init();
$http_worker = new Worker('http://0.0.0.0:8080');
$http_worker->count = 8;
$http_worker->name = 'AdapterMan';
$http_worker->onWorkerStart = static function () {
//init();
require __DIR__.'/start.php';
};
$http_worker->onMessage = static function ($connection, $request) {
$connection->send(run());
};
Worker::runAll();
项目地址:https://github.com/joanhey/AdapterMan 强烈建议大家为其点赞(点星星)
相关链接:https://github.com/walkor/workerman/issues/824
原文转载自:https://www.workerman.net/q/9831

© 版权声明
本站所有文章,如无特殊说明或标注,均为本站原创发布,文章仅代表作者个人观点,对观点有疑义请先联系作者本人进行修改,若内容侵权或非法,请先联系发布者或作者删除。任何个人或组织,在未征得本站同意时,不得复制、转载、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
下载类内容的声明
1、本站所有下载类内容的资源,都不包含免费技术服务请大家谅解!
2、下载类内容仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由用户自行承担。
3、本站站内资源均来源于网络公开发表文件或网友投稿发布,如侵犯您的权益,请联系管理员处理。
4、本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用,如有链接无法下载、失效或广告,请联系客服处理。
5、所有资源均收集于互联网仅供学习、参考和研究,与资源作者发布的内容或存在版本出入的可能,也可能存在未知的BUG与瑕疵,皆因本站资源均为可复制品,请熟知后再下载。
6、本作品仅供学习研究使用,请在安装后24小时内删除,如用于商业或者非法用途,与本站无关,一切后果请用户自负!
7、进入网站使用或下载本站资源则代表同意该声明!如不同意请离开本站!
下载类内容的声明
1、本站所有下载类内容的资源,都不包含免费技术服务请大家谅解!
2、下载类内容仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由用户自行承担。
3、本站站内资源均来源于网络公开发表文件或网友投稿发布,如侵犯您的权益,请联系管理员处理。
4、本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用,如有链接无法下载、失效或广告,请联系客服处理。
5、所有资源均收集于互联网仅供学习、参考和研究,与资源作者发布的内容或存在版本出入的可能,也可能存在未知的BUG与瑕疵,皆因本站资源均为可复制品,请熟知后再下载。
6、本作品仅供学习研究使用,请在安装后24小时内删除,如用于商业或者非法用途,与本站无关,一切后果请用户自负!
7、进入网站使用或下载本站资源则代表同意该声明!如不同意请离开本站!
THE END
暂无评论内容