Swoole学习笔记——tp5结合swoole

一、个人案例
创建http.php

//创建HTTP对象
$http = new swoole_http_server("0.0.0.0", 8081);

$http->set(①
    [
        'enable_static_handler' => true,
        'document_root'=>"/data/wwwroot/superhiee/www/public/static",
        'worker_num'=>5
        /*设置启动的Worker进程数。
         * (1) 业务代码是全异步非阻塞的,这里设置为CPU核数的1-4倍最合理
         * (2) 业务代码为同步阻塞,需要根据请求响应时间和系统负载来调整,例如:100-500
         * (3)默认设置为SWOOLE_CPU_NUM,最大不得超过SWOOLE_CPU_NUM * 1000
        */
    ]
);
$http->on('WorkerStart',function (swoole_server $server, $worker_id){
    //定义应用目录
    define('APP_PATH', __DIR__ . '/../application/');②
    //加载框架里面的文件
    require __DIR__ . '/../thinkphp/base.php';
});
$http->on('request', function($request, $response) {

//把值赋值给$_SERVER,$_GET,$_POST 方便tp5快加执行

   if(isset($request->server)
   {
       foreach ($request->server as $k=>$v)
       {
           $_SERVER[strtoupper($k)]=$v;
       }
   }
    if(isset($request->header))
    {
        foreach ($request->header as $k=>$v)
        {
            $_SERVER[strtoupper($k)]=$v;
        }
    }

    if(isset($request->get))
    {
        foreach ($request->get as $k=>$v)
        {
            $_GET[$k]=$v;
        }
    }
    if(isset($request->post))
    {
        foreach ($request->post as $k=>$v)
        {
            $_POST[$k]=$v;
        }
    }

////开启缓存
    ob_start();③
    try {

        // 执行应用并响应
        think\App::run()->send();
    }catch (\Exception $e) {

        echo $e->getMessage();
    }
    
    //获取当前缓冲区内容
    $res = ob_get_contents();
    //清空(擦除)缓冲区并关闭输出缓冲
    ob_end_clean();
    $response->header('Content-Type', 'text/html; charset=utf8');
    $response->end($res);

});

$http->start();

①:Server->set:用于设置运行时的各项参数。服务器启动后通过$serv->setting来访问Server->set方法设置的参数数组。

函数原型

function Server->set(array $setting);

这里把enable_static_handler开启,用于静态文件请求处理功能。并配合了document_root配置静态文件根目录

②:这里把tp5中的定义应用目录放在request里面,同时把require DIR . ‘/…/thinkphp/base.php’ 也放在这里面。但不能把startp.php放在这里面,如果放在这里面就会直接==App::run()->send();==执行应用。

在导入 tp框架的时候有两种方式
(1)放在 WorkStart 中,
        优点:只需要载入一次框架,速度快
        缺点:由于 tp5对swoole 支持不好,所以需要更改一些 tp5 的源码
(2) 把 define 和 require直接在放在request的请求中
          优点:不需要更改 tp5 的源码,但是在 task任务中无法通过命名空间加载类
          缺点:速度稍微慢与 WorkStart

本例子用的是第一种方法

③:ob_start([string output_callback])- 打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。

方法 说明
ob_start() 在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo ,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。
ob_get_contents() 获取缓冲区的内容
ob_flush() 冲刷出(送出)输出缓冲区中的内容
ob_clean() 清空输出缓冲区
ob_end_flush() 冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_clean() 清空(擦除)缓冲区并关闭输出缓冲
flush() 刷新输出缓冲

你可能感兴趣的:(Swoole学习笔记——tp5结合swoole)