平滑重启使PHP文件有效

在 Swoole 文档中有这么一说明
平滑重启只对onWorkerStart或onReceive等在Worker进程中include/require的PHP文件有效,Server启动前就已经include/require的PHP文件,不能通过平滑重启重新加载 "

让我们来测试一下:
# php http_server.php
WorkerStart 
WorkerStart 

访问  http://www.test-yy.com
页面内容输出 " hello Swoole test "

命令行中输出:
Test1
request 100Test1

当我们将
test.php
test_request.php
代码中的 Test1 替换成 Test2 时

访问  http://www.test-yy.com
命令行中输出:
Test1
request 88Test2

# ps -ef | grep php
# kill -USR1 8155        // 平滑重启,8155(主进程/管理进程 id

再次访问  http://www.test-yy.com
命令行中输出:
Test1
request 88Test2

以上结果说明了 include/require ,再 Server 启动前载入的PHP文件,不能通过平滑重启重新加载

测试代码:
http_server.php
<?php
echo 'shell start';
define('__ROOT__', realpath('.'));
include __ROOT__.'/test.php';

$http = new swoole_http_server("127.0.0.1", 9501);
$http->set([
    'worker_num'=>2,
    'max_request'=>50
]);

$http->on('WorkerStart', function ($serv, $worker_id){
    echo "WorkerStart \n";
});

$http->on('request', function ($request, $response) {
    getTest();
    include __ROOT__.'/test_request.php';
    $response->header("Content-Type", "text/html; charset=utf-8");
    $response->end(getTplContent());
});
$http->start();

function getTplContent() {
    return "hello Swoole test \n";
}
?>

test.php
<?php
function getTest() {
    echo "Test1 \n";
}
?>

test_request.php
<?php
echo 'request '.rand(1,100)."Test1 \n";
?>

nginx 配置
test.conf
server {
listen      80;
server_name www.test-yy.com;
...
location ~\.php$ {
                proxy_http_version 1.1;
                proxy_set_header Connection "keep-alive";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://127.0.0.1:9501;
        }

}




阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页