Beschreibung

Workerman hat ab Version 4.x die Unterstützung für HTTP-Dienste verbessert. Es wurden Klassen für Anfragen, Antworten, Sessions sowie SSE eingeführt. Wenn Sie den HTTP-Dienst von Workerman verwenden möchten, wird dringend empfohlen, Workerman 4.x oder eine höhere Version zu verwenden.

Bitte beachten Sie, dass die folgenden Beispiele für die Verwendung von Workerman 4.x gelten und nicht mit Workerman 3.x kompatibel sind.

Anforderungen Objekt erhalten

Das Anfrageobjekt wird ausschließlich in der onMessage-Rückruffunktion abgerufen, das Framework übergibt das Request-Objekt automatisch als zweites Argument in die Rückruffunktion.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    // $request ist das Anfrageobjekt, hier wird keine Operation auf dem Anfrageobjekt ausgeführt, sondern direkt hello an den Browser zurückgegeben
    $connection->send("hello");
};

// Worker ausführen
Worker::runAll();

Wenn der Browser http://127.0.0.1:8080 aufruft, wird hello zurückgegeben.

GET-Anforderungsparameter erhalten

Gesamtes GET-Array abrufen

$get = $request->get();

Wenn die Anfrage keine GET-Parameter hat, wird ein leeres Array zurückgegeben.

Einen bestimmten Wert aus dem GET-Array abrufen

$name = $request->get('name');

Wenn der Wert im GET-Array nicht vorhanden ist, wird null zurückgegeben.

Sie können auch einen Standardwert als zweites Argument an die Methode get übergeben, falls der entsprechende Wert im GET-Array nicht gefunden wird. Zum Beispiel:

$name = $request->get('name', 'tom');

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->get('name'));
};

// Worker ausführen
Worker::runAll();

Wenn der Browser http://127.0.0.1:8080?name=jerry&age=12 aufruft, wird jerry zurückgegeben.

POST-Anforderungsparameter erhalten

Gesamtes POST-Array abrufen

$post = $request->post();

Wenn die Anfrage keine POST-Parameter hat, wird ein leeres Array zurückgegeben.

Einen bestimmten Wert aus dem POST-Array abrufen

$name = $request->post('name');

Wenn der Wert im POST-Array nicht vorhanden ist, wird null zurückgegeben.

Ähnlich wie bei der Methode get können Sie auch der Methode post einen Standardwert als zweites Argument übergeben, falls der entsprechende Wert im POST-Array nicht gefunden wird. Zum Beispiel:

$name = $request->post('name', 'tom');

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $post = $request->post();
    $connection->send(var_export($post, true));
};

// Worker ausführen
Worker::runAll();

Roh-Anforderungspost-Body erhalten

$post = $request->rawBody();

Diese Funktion ähnelt der file_get_contents("php://input");-Operation in php-fpm. Sie wird verwendet, um den ursprünglichen HTTP-Anforderungs-Body zu erhalten. Dies ist nützlich, um Daten von POST-Anfragen im Format application/x-www-form-urlencoded abzurufen.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $post = json_decode($request->rawBody());
    $connection->send('hello');
};

// Worker ausführen
Worker::runAll();

Header abrufen

Gesamtes Header-Array abrufen

$headers = $request->header();

Wenn die Anfrage keine Header-Parameter hat, wird ein leeres Array zurückgegeben. Beachten Sie, dass alle Keys in Kleinbuchstaben sind.

Einen bestimmten Wert aus dem Header-Array abrufen

$host = $request->header('host');

Wenn der Wert im Header-Array nicht vorhanden ist, wird null zurückgegeben. Beachten Sie, dass alle Keys in Kleinbuchstaben sind.

Ähnlich wie bei der Methode get können Sie auch der Methode header einen Standardwert als zweites Argument übergeben, falls der entsprechende Wert im Header-Array nicht gefunden wird. Zum Beispiel:

$host = $request->header('host', 'localhost');

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    if ($request->header('connection') === 'keep-alive') {
        $connection->send('hello');
    } else {
        $connection->close('hello');
    }    
};

// Worker ausführen
Worker::runAll();

Cookies abrufen

Gesamtes Cookie-Array abrufen

$cookies = $request->cookie();

Wenn die Anfrage keine Cookies-Parameter hat, wird ein leeres Array zurückgegeben.

Einen bestimmten Wert aus dem Cookie-Array abrufen

$name = $request->cookie('name');

Wenn der Wert im Cookie-Array nicht vorhanden ist, wird null zurückgegeben.

Ähnlich wie bei der Methode get können Sie auch der Methode cookie einen Standardwert als zweites Argument übergeben, falls der entsprechende Wert im Cookie-Array nicht gefunden wird. Zum Beispiel:

$name = $request->cookie('name', 'tom');

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $cookie = $request->cookie();
    $connection->send(var_export($cookie, true));
};

// Worker ausführen
Worker::runAll();

Hochgeladene Dateien abrufen

Gesamtes Array der hochgeladenen Dateien abrufen

$files = $request->file();

Das zurückgegebene Dateiformat ähnelt:

array (
    'avatar' => array (
            'name' => '123.jpg',
            'tmp_name' => '/tmp/workerman.upload.9hjR4w',
            'size' => 1196127,
            'error' => 0,
            'type' => 'application/octet-stream',
      ),
     'anotherfile' =>  array (
            'name' => '456.txt',
            'tmp_name' => '/tmp/workerman.upload.9sirSws',
            'size' => 490,
            'error' => 0,
            'type' => 'text/plain',
      )
)

Dabei ist:

  • name der Dateiname
  • tmp_name der Speicherort der temporären Datei auf der Festplatte
  • size die Dateigröße
  • error der Fehlercode
  • type der MIME-Typ der Datei.

Beachten Sie:

  • Die Größe der hochgeladenen Dateien unterliegt der defaultMaxPackageSize, standardmäßig 10 MB, kann jedoch angepasst werden.

  • Nach Abschluss der Anfrage werden die Dateien automatisch gelöscht.

  • Wenn die Anfrage keine hochgeladenen Dateien enthält, wird ein leeres Array zurückgegeben.

Spezielle hochgeladene Datei abrufen

$avatar_file = $request->file('avatar');

Gibt Folgendes zurück:

array (
        'name' => '123.jpg',
        'tmp_name' => '/tmp/workerman.upload.9hjR4w',
        'size' => 1196127,
        'error' => 0,
        'type' => 'application/octet-stream',
  )

Wenn die hochgeladene Datei nicht vorhanden ist, wird null zurückgegeben.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $file = $request->file('avatar');
    if ($file && $file['error'] === UPLOAD_ERR_OK) {
        rename($file['tmp_name'], '/home/www/web/public/123.jpg');
        $connection->send('ok');
        return;
    }
    $connection->send('upload fail');
};

// Worker ausführen
Worker::runAll();

Host abrufen

Die Host-Informationen der Anfrage abrufen.

$host = $request->host();

Wenn die Adresse der Anfrage nicht der Standardport 80 oder 443 ist, kann die Host-Information den Port enthalten, z. B. example.com:8080. Wenn der Port nicht erforderlich ist, kann das erste Argument auf true gesetzt werden.

$host = $request->host(true);

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->host());
};

// Worker ausführen
Worker::runAll();

Wenn der Browser http://127.0.0.1:8080?name=tom aufruft, wird 127.0.0.1:8080 zurückgegeben.

Anforderungsmethode abrufen

$method = $request->method();

Der Rückgabewert kann eines der folgenden sein: GET, POST, PUT, DELETE, OPTIONS, HEAD.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->method());
};

// Worker ausführen
Worker::runAll();

Anforderungs-URI abrufen

$uri = $request->uri();

Gibt die URI der Anfrage zurück, einschließlich der Path- und QueryString-Teile.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->uri());
};

// Worker ausführen
Worker::runAll();

Wenn der Browser http://127.0.0.1:8080/user/get.php?uid=10&type=2 aufruft, wird /user/get.php?uid=10&type=2 zurückgegeben.

Anforderungspfad abrufen

$path = $request->path();

Gibt den Path-Teil der Anfrage zurück.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->path());
};

// Worker ausführen
Worker::runAll();

Wenn der Browser http://127.0.0.1:8080/user/get.php?uid=10&type=2 aufruft, wird /user/get.php zurückgegeben.

Anforderung queryString abrufen

$query_string = $request->queryString();

Gibt den QueryString-Teil der Anfrage zurück.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->queryString());
};

// Worker ausführen
Worker::runAll();

Wenn der Browser http://127.0.0.1:8080/user/get.php?uid=10&type=2 aufruft, wird uid=10&type=2 zurückgegeben.

Anforderungs-HTTP-Version abrufen

$version = $request->protocolVersion();

Gibt den String 1.1 oder 1.0 zurück.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->protocolVersion());
};

// Worker ausführen
Worker::runAll();

Anforderungs-sessionId abrufen

$sid = $request->sessionId();

Gibt einen String zurück, der aus Buchstaben und Zahlen besteht.

Beispiel

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->sessionId());
};

// Worker ausführen
Worker::runAll();