ThinkPHP5.1开启swoole

# tp5.1根目录新建目录和文件server/http_server.php。让swoole做http服务,server/http_server.php写入如下:

set(
    [
        'enable_static_handler' => true,
        'document_root' => "/home/wwwroot/tp51/public/static",
        'worker_num' => 5,//产生进程的个数
    ]
);
$http->on('WorkerStart',function ($ser,$worker_id){
    define('APP_PATH', __DIR__ . '/../application/');
    require __DIR__ . '/../thinkphp/base.php';
});
$http->on('request', function($request, $response) use($http) {
    if(isset($request->header)){
        foreach ($request->header as $k=>$v){
            $_SERVER[strtoupper($k)] = $v;
        }
    }
    if(isset($request->server)){
        foreach ($request->server as $k=>$v){
            $_HEADER[strtoupper($k)] = $v;
        }
    }
    $_GET = [];
    if(isset($request->get)){
        foreach ($request->get as $k=>$v){
            $_GET[$k] = $v;
        }
    }
    $_POST = [];
    if(isset($request->post)){
        foreach ($request->post as $k=>$v){
            $_POST[$k] = $v;
        }
    }
    // 执行应用并响应
    //开启缓存
    ob_start();
    try{
        think\Container::get('app', [APP_PATH])->run()->send();
    }catch (\Exception $e){

    }
    $res = ob_get_contents();
    ob_end_clean();
    $response->end($res);
    //$http->close();
});
$http->start();

代码说明:
(1)$http->onWorkerStart:启动进程的时候,加载thinkphp的框架文件,base.php,但是这个时候,不能run,等待请求来了再去run。
(2)$http->onrequest:当收到客户端的请求时,把swoole的header头信息,server信息,get数据,post数据等消息转化为常规的$_SERVER,$_GET等信息,可以适配tp5。
(3)最后开始run,这个时候需要把run得到的信息加载到缓存,然后再通过send()返回给客户端。

# Swoole适配thinkphp5

1. 因为swoole是常驻进程,前一个请求的$_POST,$_GET请求不会销毁,原因这个进程并没有kill,这个时候,需要在接收请求的时候,将$_GET,$_POST置空。
2. swoole路由机制,总会从缓存中获取有没有这个请求,如果有,就不加载新的,所以,swoole常驻内存,会发现一直请求第一个url。除非重启swoole服务器。

在thinkphp框架里面,修改Request文件,将两个方法(pathinfo,path)里面的$this->path这个为空的判断去掉(注释掉),让每次请求都去解析这个url。

ThinkPHP5.1开启swoole_第1张图片

 

-

# 访问接口+所配置的端口即可。

-

参考:

https://blog.csdn.net/qq_34827048/article/details/80642140

https://blog.csdn.net/jeremy_ke/article/details/85054652

https://learnku.com/articles/13162/laravel-integrated-swoole-tutorial

你可能感兴趣的:(ThinkPHP5.1开启swoole)