zhanguangcheng/linkerman

Linkerman是一个利用Workerman加速PHP框架的库。

v0.3.2 2024-05-25 13:59 UTC

This package is auto-updated.

Last update: 2024-09-25 15:35:56 UTC


README

License

Linkerman是一个利用Workerman加速PHP框架的库。

如果你的应用程序或框架使用前端控制器,99%它会工作。需要最小PHP 8.0。

工作原理

  1. 当请求到达时,调用Workerman的Request对象注册超全局变量:$_GET $_POST $_COOKIE $_FILES $_SERVER $_REQUEST
  2. 重写内置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库相关的信息和用法说明。