亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Swoole完美支持Think5.1

標簽:
ThinkPHP Swoole

1、首先创建一个http_server对象

ThinkPHP目录下创建一个server目录,里面创建一个HTTP Server的php文件

2、需要在WorkerStart回调事件加载ThinkPHP核心文件

define('APP_PATH', __DIR__ . '/../application/');// 定义应用目录
require __DIR__ . '/../thinkphp/base.php'; //加载基础文件

3、转换TP可识别的请求类型

因为swoole接收get、post参数等和TP中接收不一样,所以需要转换为TP可识别,转换get参数示例如下:

$_GET = [];
if (isset($request->get)) {
    foreach ($request->get as $key => $value) {
        $_GET[$key] = $value;
    }
}

4、thinkphp会把模块、控制器、方法放到一个变量里去,所以通过pathinfo模式访问会存在只能访问第一次的pathinfo这个问题,worker进程里是不会注销变量的

解决办法:
thinkphp/library/think/Request.php
function path 中的if (is_null($this->path)) {}注释或删除
function pathinfo中的if (is_null($this->pathinfo)) {}注释或删除
注意:只删除条件,不删除条件中的内容

5、Swoole完美支持TP代码示例:

<?php
$http = new swoole_http_server("0.0.0.0", 8811);
$http->set(
    [
        'enable_static_handler' => true,
        'document_root' => "/home/thinkphp/public/static",
        'worker_num' => 5,
    ]
);
$http->on('WorkerStart', function(swoole_server $server,  $worker_id) {
    // 定义应用目录
    define('APP_PATH', __DIR__ . '/../application/');
    // 加载框架里面的文件
    require __DIR__ . '/../thinkphp/base.php';
    //require __DIR__ . '/../thinkphp/start.php';
});
$http->on('request', function($request, $response) use($http){

    //define('APP_PATH', __DIR__ . '/../application/');
    //require __DIR__ . '/../thinkphp/base.php';
    $_SERVER  =  [];
    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;
        }
    }

    $_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) {
        // todo
    }

    //echo "-action-".request()->action().PHP_EOL;
    $res = ob_get_contents();
    ob_end_clean();
    $response->end($res);
    //$http->close();
});

$http->start();

// topthink/think-swoole
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消