Heim > Artikel > PHP-Framework > Unterstützt thinkphp5 swoole Ctrip?
Lassen Sie uns zunächst den Funktionsmechanismus von ThinkPHP verstehen.
TP5-Betriebsmechanismus :
Jede Anfrage durchläuft die tp5-Eintragsdatei, lädt die Framework-Konfigurationsdatei, startet den Prozess und verarbeitet dann die Anfrage.
In der Eintragsdatei von index.php können Sie sehen, dass sie zuerst die APP_PATH-Konstante definiert und dann die Startdatei start.php des Frameworks einführt, dann wir Werfen wir einen Blick darauf, was die Datei start.php bewirkt.
Hier lädt es zuerst die Basisdatei base.php, startet dann den Framework-Lauf und beginnt zu diesem Zeitpunkt mit der Verarbeitung von Anforderungen.
Konventioneller Nginx- und Apache-Server: Jedes Mal, wenn eine Anfrage an thinkphp eingeht, werden die statischen Variablen gelöscht und die Konfigurationsdatei neu geladen. Der von swoole erstellte Server ist jedoch ein residenter Prozess. Nach dem Start des Dienstes werden mehrere Prozesse generiert, um die Anfrage zu bearbeiten. Wir möchten, dass die Konfiguration selektiv geladen wird.
Swoole wird der http-Server sein
<?php $http = new swoole_http_server("0.0.0.0", 8888); $http->set( [ 'enable_static_handler' => true, 'document_root' => "/data/wwwroot/zhibo/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();
Codebeschreibung:
(1) $ http ->onWorkerStart: Beim Starten des Prozesses wird die thinkphp-Framework-Datei base.php geladen. Zu diesem Zeitpunkt kann sie jedoch nicht ausgeführt werden, bevor sie ausgeführt wird.
(2) $http->onrequest: Konvertieren Sie beim Empfang einer Anfrage vom Client Swoole-Header-Informationen, Serverinformationen, Daten abrufen, Postdaten und andere Nachrichten in reguläre $_SERVER-, $_GET- und andere Informationen , kann an tp5 angepasst werden.
(3) Starten Sie schließlich den Lauf. Zu diesem Zeitpunkt müssen Sie die durch den Lauf erhaltenen Informationen in den Cache laden und sie dann über send() an den Client zurücksenden.
Swoole passt sich an thinkphp5 an
Da Swoole ein residenter Prozess ist, werden die $_POST- und $_GET-Anfragen der vorherigen Anfrage nicht zerstört, da dies bei diesem Prozess nicht der Fall ist Zu diesem Zeitpunkt müssen Sie $_GET und $_POST leer lassen, wenn Sie die Anfrage erhalten.
Der Swoole-Routing-Mechanismus ruft die Anfrage immer aus dem Cache ab. Wenn dies der Fall ist, wird keine neue URL geladen. Daher befindet sich Swoole immer im Speicher und findet immer die erste angeforderte URL. Es sei denn, der Swoole-Server wird neu gestartet.
Ändern Sie im thinkphp-Framework die Anforderungsdatei und entfernen Sie das leere Urteil von $this->path in den beiden Methoden (pathinfo, path), sodass jeweils Diese URL wird für jede Anfrage analysiert.
Verifizierungsergebnisse:
Der obige Inhalt dient nur als Referenz!
Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website: thinkphp-Tutorial
Das obige ist der detaillierte Inhalt vonUnterstützt thinkphp5 swoole Ctrip?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!