Maison  >  Article  >  cadre php  >  thinkphp5 prend-il en charge swoole Ctrip ?

thinkphp5 prend-il en charge swoole Ctrip ?

王林
王林avant
2019-09-12 11:38:263317parcourir

thinkphp5 prend-il en charge swoole Ctrip ?

Tout d’abord, comprenons le mécanisme de fonctionnement de ThinkPHP.

Mécanisme de fonctionnement TP5  :

Toute demande passera par le fichier d'entrée tp5, chargera le fichier de configuration du framework, démarrera le processus, puis traitera la demande.

thinkphp5 prend-il en charge swoole Ctrip ?

Dans le fichier d'entrée de index.php, vous pouvez voir qu'il définit d'abord la constante APP_PATH, puis introduit le fichier de démarrage start.php du framework, puis on Jetons un coup d'œil à ce que fait le fichier start.php.

thinkphp5 prend-il en charge swoole Ctrip ?

Ici, il charge d'abord le fichier de base base.php, puis démarre l'exécution du framework et commence à traiter les requêtes à ce moment-là.

Nginx conventionnel, serveur Apache, chaque fois qu'une requête arrive à thinkphp, les variables statiques seront effacées et le fichier de configuration sera rechargé. Cependant, le serveur créé par swoole est un processus résident. Après le démarrage du service, plusieurs processus seront générés pour gérer la demande. Nous voulons lui permettre de charger sélectivement la configuration.

Swoole sera le serveur http

<?php
$http = new swoole_http_server("0.0.0.0", 8888);

$http->set(
    [
        &#39;enable_static_handler&#39; => true,
        &#39;document_root&#39; => "/data/wwwroot/zhibo/public/static",
        &#39;worker_num&#39; => 5,//产生进程的个数
    ]
);
$http->on(&#39;WorkerStart&#39;,function ($ser,$worker_id){
    define(&#39;APP_PATH&#39;, __DIR__ . &#39;/../application/&#39;);
    require __DIR__ . &#39;/../thinkphp/base.php&#39;;
});
$http->on(&#39;request&#39;, 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(&#39;app&#39;, [APP_PATH])->run()->send();
    }catch (\Exception $e){

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

Description du code :

(1) $ http ->onWorkerStart : lors du démarrage du processus, le fichier de framework thinkphp, base.php, est chargé. Cependant, à ce stade, il ne peut pas être exécuté. Il attend que la requête arrive avant de s'exécuter.

(2) $http->onrequest : lors de la réception d'une demande du client, convertissez les informations d'en-tête swoole, les informations du serveur, obtenez des données, publiez des données et d'autres messages en $_SERVER, $_GET et autres informations ordinaires. , peut être adapté à tp5.

(3) Enfin, démarrez l'exécution. À ce stade, vous devez charger les informations obtenues par l'exécution dans le cache, puis les renvoyer au client via send().

Swoole s'adapte à thinkphp5

Comme swoole est un processus résident, les requêtes $_POST et $_GET de la requête précédente ne seront pas détruites, car ce processus n'est pas tué À ce stade, vous devez laisser $_GET et $_POST vides lors de la réception de la demande.

Le mécanisme de routage swoole récupèrera toujours la requête du cache. S'il y en a, aucune nouvelle ne sera chargée. Par conséquent, swoole réside en mémoire et trouvera toujours la première URL demandée. A moins de redémarrer le serveur swoole.

thinkphp5 prend-il en charge swoole Ctrip ?

Dans le framework thinkphp, modifiez le fichier Request et supprimez le jugement vide de $this->path dans les deux méthodes (pathinfo, path), pour que chaque This URL est analysé pour chaque demande.

Résultats de la vérification :

thinkphp5 prend-il en charge swoole Ctrip ?

thinkphp5 prend-il en charge swoole Ctrip ?

Le contenu ci-dessus est à titre de référence uniquement !

Si vous souhaitez en savoir plus sur le contenu connexe, veuillez visiter le site Web php chinois : tutoriel thinkphp

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer