Heim  >  Artikel  >  PHP-Framework  >  Workerman-Entwicklung: So implementieren Sie ein Batch-Dateiverarbeitungssystem basierend auf dem HTTP-Protokoll

Workerman-Entwicklung: So implementieren Sie ein Batch-Dateiverarbeitungssystem basierend auf dem HTTP-Protokoll

PHPz
PHPzOriginal
2023-11-07 12:16:501011Durchsuche

Workerman-Entwicklung: So implementieren Sie ein Batch-Dateiverarbeitungssystem basierend auf dem HTTP-Protokoll

Entwickelt von Workerman: Für die Implementierung eines Batchdateiverarbeitungssystems basierend auf dem HTTP-Protokoll sind spezifische Codebeispiele erforderlich.

Mit der Entwicklung des Internets und der digitalen Technologie ist die Datenverarbeitung insbesondere in Unternehmen immer wichtiger geworden . Manchmal müssen wir eine große Anzahl von Dateien verarbeiten, z. B. Bilder, Videos, Audios usw. Derzeit ist die manuelle Bedienung nicht nur zeit- und arbeitsintensiv, sondern auch fehleranfällig. Die Implementierung eines Batch-Dateiverarbeitungssystems ist das Thema, das in diesem Artikel behandelt wird.

Workerman ist ein in PHP entwickeltes, leistungsstarkes Socket-Framework, das einfach zu verwenden ist und ein ereignisgesteuertes Programmiermodell bietet. Dieser Artikel konzentriert sich auf die Verwendung von Workerman zur Entwicklung eines Batchdateiverarbeitungssystems basierend auf dem HTTP-Protokoll. Mit diesem System können wir Funktionen wie Batch-Upload, Komprimierung und Transkodierung von Dateien erreichen.

1. Richten Sie eine Entwicklungsumgebung ein
Zunächst müssen wir PHP, Composer und Workerman installieren. Hier finden Sie eine Einführung in die Installation von Composer. Öffnen Sie Ihr Befehlszeilentool und geben Sie den folgenden Befehl ein:

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "unlink('composer-setup.php');"

Nachdem die Installation abgeschlossen ist, müssen wir den folgenden Befehl im Projektverzeichnis ausführen, um Workerman zu installieren:

$ Composer require workerman/workerman

2. Erstellen Sie das Projekt und die Verzeichnisstruktur

Wir erstellen ein Batch-Dateiverarbeitungssystemprojekt, der Projektname ist Batchfile, die Verzeichnisstruktur ist wie folgt:

├─Anwendungen #Anwendungsverzeichnis

│ ├─App #Anwendungsverzeichnis
│ │ └─Http #Http-Anwendungsverzeichnis
│ │ ├─Config #Konfigurationsverzeichnis
│ │ ├─Controller #Controller-Verzeichnis
│ │ ├─Events #Event-Verzeichnis
│ │ ├─Bibliotheken #Bibliothek
│ │ ├─Modelle #Modellverzeichnis
│ │ ├ ─Aufgaben #Aufgabenverzeichnis
│ │ └─Ansichten #Verzeichnis anzeigen
│ └─config #Globale Konfigurationsdatei
├─öffentliches #Web-Stammverzeichnis
│ ├─css #CSS-Dateiverzeichnis
│ ├ ─js #JS-Dateiverzeichnis
│ └─index.php #Website-Eintragsdatei
├─start.php #Systemstartdatei
└─composer.json #Abhängigkeitsverwaltungsdatei

Wir haben ein Anwendungsverzeichnis in der Verzeichnisstruktur erstellt, das enthält Konfiguration, Controller, Ereignisse, Bibliotheken, Modelle und andere Verzeichnisse. Diese Verzeichnisse werden zur Verwaltung von Komponenten der Anwendung verwendet. Beispielsweise wird das Controller-Verzeichnis zum Verwalten von Controller-Klassen und das Models-Verzeichnis zum Verwalten von Datenmodellklassen usw. verwendet.

Wir erstellen die Datei index.php im öffentlichen Verzeichnis, die unsere Website-Eingangsdatei ist. Wir werden diese Datei in den nächsten Schritten einrichten.

3. Schreiben Sie das Startskript

Das Workerman-Framework verwendet den Socket-Modus und kann nicht über den Browser aufgerufen werden. Daher müssen wir die Startdatei als separate PHP-Datei speichern. Öffnen Sie die Datei start.php und geben Sie den folgenden Code ein:

use WorkermanWorker;
require_once
DIR '/vendor/autoload.php';$http_worker = new Worker("http:// 0.0.0.0:9000");

$http_worker->count = 4;

$http_worker->onWorkerStart = function($worker) {

require_once __DIR__ . '/applications/app/Http/routes.php';

};

Worker::runAll();

Mit dem obigen Code haben wir eine Worker-Instanz namens $http_worker erstellt und die Routing-Datei „routes.php“ über das Ereignis „onWorkerStart“ geladen.

4. Routen schreiben

Öffnen Sie die Datei /applications/app/Http/routes.php und geben Sie den folgenden Code ein:

use WorkermanProtocolsHttp;

$http->onMessage = function($connection , $ data) {

$request_data = Http::requestData($data);
$request_path = $request_data['path'];
if (($pos = strpos($request_path, '?')) !== false) {
    $request_path = substr($request_path, 0, $pos);
}
$controller_action = str_replace('/', '\', $request_path);
$controller_action = ucfirst(strtolower($controller_action));
$controller_action = str_replace('-', '', $controller_action);
$controller_action = trim($controller_action, '\');
$controller_action = 'App\Http\Controllers\' . $controller_action . 'Controller';
if (!class_exists($controller_action)) {
    Http::header("HTTP/1.1 404 Not Found

");

    Http::end("404 Not Found");
    return;
}
$controller = new $controller_action();
$method = isset($request_data['query']['method']) ? $request_data['query']['method'] : 'index';
if (!method_exists($controller, $method)) {
    Http::header("HTTP/1.1 404 Not Found

");

    Http::end("404 Not Found");
    return;
}
$controller->$method();

};

Im obigen Code analysieren wir die Anforderungsdaten über das HTTP-Protokoll, laden den entsprechenden Controller entsprechend der Anforderungsroute und Greifen Sie auf die Controller-Methode zu.

5. Schreiben Sie den Controller

Öffnen Sie die Datei /applications/app/Http/Controllers/BatchfileController.php und geben Sie den folgenden Code ein:

namespace AppHttpControllers;

use WorkermanProtocolsHttp;

use WorkermanProtocolsHttpResponse;
use WorkermanProtocolsHttpRequest ;

class BatchfileController

{

public function index()
{
    return new Response('Hello world'.PHP_EOL);
}

public function uploadFiles(Request $request)
{
    $files = $request->file();
    if(empty($files)){
        return new Response(json_encode([
            'message' => 'No files were uploaded.',
        ]));
    }
    //处理你需要处理的逻辑
    return new Response(json_encode([
        'message' => 'Files uploaded successfully.',
    ]));
}

}

Im obigen Code haben wir einen BatchfileController-Controller geschrieben, der die Methoden index() und uploadFiles(Request $request) definiert.

6. Datei-Upload-Anfrage empfangen

Öffnen Sie die Datei /applications/app/Http/Controllers/BatchfileController.php und geben Sie den folgenden Code in die uploadFiles-Methode ein:

public function uploadFiles(Request $request)

{

$files = $request->file();
if(empty($files)){
    return new Response(json_encode([
        'message' => 'No files were uploaded.',
    ]));
}
$result = [];
foreach ($files as $name => $file) {
    $path = 'uploads/' . $file['name'];
    if(move_uploaded_file($file['tmp_name'], $path)){
        $result[] = [
            'name' => $file['name'],
            'type' => $file['type'],
            'size' => $file['size'],
            'path' => $path,
        ];
    }
}

//处理你需要处理的逻辑

return new Response(json_encode([
    'message' => 'Files uploaded successfully.',
    'files' => $result,
]));

}

Im obigen Code erhalten wir die hochgeladene Datei über die Methode $request->file(), verwenden die Methode move_uploaded_file, um die hochgeladene Datei in unser benutzerdefiniertes Upload-Verzeichnis zu verschieben, speichern dann die Dateiinformationen in einem Array und schließlich das Ergebnis zurückgeben.

7. Führen Sie den Test aus
Geben Sie im Befehlszeilenmodus das Projektverzeichnis ein und führen Sie den Befehl php start.php aus, um den Workerman-Dienst zu starten. Wenn alles normal ist, geben Sie http://localhost:9000 in die Adressleiste des Browsers ein und Sie sehen die Ausgabe „Hallo Welt“. Die laufenden Ergebnisse lauten wie folgt:

Wenn Sie die Funktion zum Hochladen von Dateien testen möchten, können Sie Postman- oder Curl-Befehle für Simulationstests verwenden. Der Anforderungsbeispielcode lautet wie folgt:

curl -X POST
http://localhost:9000/file/upload
-H 'cache-control: no-cache'
-H 'content-type: multipart/form- data; border =----WebKitFormBoundary7MA4YWxkTrZu0gW'
-F 'file1=@/path/to/file1.png'
-F 'file2=@/path/to/file2.jpg'

An diesem Punkt haben wir Workerman wurde erfolgreich für die Entwicklung eines Batch-Dateiverarbeitungssystems verwendet, das auf dem HTTP-Protokoll basiert und die Funktion zum Hochladen von Dateien implementiert. Auf dieser Basis können wir weiter ausbauen, um Dateikomprimierung, Transkodierung und andere Funktionen zu erreichen. Das ereignisgesteuerte Programmiermodell des Workerman-Frameworks ermöglicht es uns, die Funktionalität der Anwendung einfach zu erweitern.

Das obige ist der detaillierte Inhalt vonWorkerman-Entwicklung: So implementieren Sie ein Batch-Dateiverarbeitungssystem basierend auf dem HTTP-Protokoll. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn