zhanguangcheng / linkerman
Linkerman是一个利用Workerman加速PHP框架的库。
v0.3.2
2024-05-25 13:59 UTC
Requires
- php: ^8.0
- workerman/workerman: ^4.1
Requires (Dev)
- ext-curl: *
- guzzlehttp/guzzle: ^7.8
- pestphp/pest: ^2.25
Suggests
- ext-event: For better performance.
README
Linkerman是一个利用Workerman加速PHP框架的库。
如果你的应用程序或框架使用前端控制器,99%它会工作。需要最小PHP 8.0。
工作原理
- 当请求到达时,调用Workerman的Request对象注册超全局变量:
$_GET$_POST$_COOKIE$_FILES$_SERVER$_REQUEST - 重写内置PHP函数,如
header()setcookie()session_*等,并将它们转换为Workerman的Response对象
框架启动模板示例
安装
您可以通过Composer安装Linkerman
composer require zhanguangcheng/linkerman
要求
- PHP >= 8.0
用法
server.php
<?php use Linkerman\Linkerman; use Workerman\Connection\TcpConnection; use Workerman\Protocols\Http\Request; use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; Linkerman::init(); $worker = new Worker('http://127.0.0.1:8080'); $worker->count = 8; $worker->name = 'linkerman'; $worker->onWorkerStart = static function () { require __DIR__ . '/start.php'; }; $worker->onMessage = static function (TcpConnection $connection, Request $request) { $connection->send(run($request)); }; Worker::runAll();
Yii2框架的start.php看起来像这样
<?php use yii\base\InvalidConfigException; use yii\web\Application; defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENABLE_ERROR_HANDLER') or define('YII_ENABLE_ERROR_HANDLER', false); require_once __DIR__ . '/vendor/yiisoft/yii2/Yii.php'; global $config; $config = require __DIR__ . '/config/web.php'; /** * @throws InvalidConfigException */ function run($request): string { global $config; ob_start(); $app = new Application($config); $app->run(); return (string)ob_get_clean(); }
添加到php.ini文件中
disable_functions=set_time_limit,header,header_remove,headers_sent,headers_list,http_response_code,setcookie,setrawcookie,session_start,session_id,session_name,session_save_path,session_status,session_write_close,session_regenerate_id,session_unset,session_destroy,session_set_cookie_params,session_get_cookie_params,is_uploaded_file,move_uploaded_file
启动服务
php server.php start
注意事项
已知不兼容的函数或语句
https://www.workerman.net/doc/workerman/appendices/unavailable-functions.html
pcntl_fork()- 解决方案:提前设置进程数
exit()die()- 解决方案:替换为函数
exit_exception()
- 解决方案:替换为函数
file_get_contents("php://input")- 解决方案:替换为函数
request_raw_body()
- 解决方案:替换为函数
register_shutdown_function()- 原因:由于常驻内存运行,注册的回调函数实际上并未执行,可能导致内存泄漏
- 解决方案:替换为函数`register_shutdown_function_user()`
如何访问Workerman的连接对象和请求对象
// Workerman Connection Object $GLOBALS['WORKERMAN_CONNECTION']; // Workerman Request Object $GLOBALS['WORKERMAN_REQUEST'];
许可证
Linkerman是开源软件,根据MIT许可证授权。
安全漏洞
如果您在Linkerman中发现安全漏洞,请提交问题或发送电子邮件至zhanguangcheng at 14712905@qq.com。所有安全漏洞都将得到及时处理。
测试
您可以使用以下命令运行测试
vendor/bin/pest
参考
更多信息
您可以在主页上找到有关Linkerman及其用法的更多信息。
此README.md文件是根据提供的composer.json生成的。请确保将其更新为与Linkerman库相关的信息和用法说明。