Erklärung

Ab der Version 4.x hat Workerman die Unterstützung für HTTP-Dienste erweitert. Es wurden Request-Klasse, Response-Klasse, Session-Klasse und SSE eingeführt. Wenn Sie Workerman für HTTP-Dienste verwenden möchten, wird dringend empfohlen, Workerman 4.x oder höhere Versionen zu verwenden.

Beachten Sie, dass dies alle Verwendungsweisen der Workerman 4.x-Version sind und nicht mit Workerman 3.x kompatibel sind.

Abrufen des Anfrageobjekts

Das Anfrageobjekt wird immer im onMessage-Rückruffunktion erhalten, das Framework überträgt automatisch das Request-Objekt als zweiten Parameter 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 kein direkter Vorgang auf das Anfrageobjekt ausgeführt, sondern direkt "hello" an den Browser zurückgesendet.
    $connection->send("hello");
};

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

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

Abrufen der GET-Anfrageparameter

Abrufen des gesamten GET-Arrays

$get = $request->get();

Wenn keine GET-Parameter in der Anfrage enthalten sind, wird ein leeres Array zurückgegeben.

Abrufen eines Werts aus dem GET-Array

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

Wenn der GET-Array diesen Wert nicht enthält, wird null zurückgegeben.

Sie können auch einen Standardwert als zweites Argument an die get-Methode übergeben, der zurückgegeben wird, wenn 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.

Abrufen der POST-Anfrageparameter

Abrufen des gesamten POST-Arrays

$post = $request->post();

Wenn keine POST-Parameter in der Anfrage enthalten sind, wird ein leeres Array zurückgegeben.

Abrufen eines Werts aus dem POST-Array

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

Wenn der POST-Array diesen Wert nicht enthält, wird null zurückgegeben.

Wie bei der get-Methode können Sie der post-Methode auch einen Standardwert als zweites Argument übergeben, der zurückgegeben wird, wenn 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();

Abrufen des ursprünglichen POST-Anfragepakets

$post = $request->rawBody();

Diese Funktion ähnelt der Verwendung von file_get_contents("php://input") in php-fpm. Es dient zum Abrufen des ursprünglichen HTTP-Anfragekörpers. Dies ist nützlich, um POST-Anfragedaten in einem Format zu erhalten, das nicht application/x-www-form-urlencoded ist.

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

Abrufen des gesamten Header-Arrays

$headers = $request->header();

Wenn die Anfrage keine Header-Parameter enthält, wird ein leeres Array zurückgegeben. Beachten Sie, dass alle Keys klein geschrieben sind.

Abrufen eines Werts aus dem Header-Array

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

Wenn der Header-Array diesen Wert nicht enthält, wird null zurückgegeben. Beachten Sie, dass alle Keys klein geschrieben sind.

Wie bei der get-Methode können Sie der header-Methode auch einen Standardwert als zweites Argument übergeben, der zurückgegeben wird, wenn 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();

Cookie abrufen

Abrufen des gesamten Cookie-Arrays

$cookies = $request->cookie();

Wenn die Anfrage keine Cookie-Parameter enthält, wird ein leeres Array zurückgegeben.

Abrufen eines Werts aus dem Cookie-Array

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

Wenn das Cookie-Array diesen Wert nicht enthält, wird null zurückgegeben.

Wie bei der get-Methode können Sie auch der cookie-Methode einen Standardwert als zweites Argument übergeben, der zurückgegeben wird, wenn 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

Abrufen des gesamten Array der hochgeladenen Dateien

$files = $request->file();

Das zurückgegebene Dateiformat sieht ähnlich aus:

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:

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

Hinweis:

  • Die Größe der hochgeladenen Dateien unterliegt der Einschränkung von defaultMaxPackageSize, standardmäßig 10 MB, kann jedoch geändert 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.

Abrufen einer bestimmten hochgeladenen Datei

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

Gibt Ähnliches 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

Abrufen der Host-Informationen der Anfrage.

$host = $request->host();

Wenn die Adresse der Anfrage nicht der Standard-Port 80 oder 443 ist, kann die Host-Information einen Port enthalten, z.B. example.com:8080. Wenn kein Port benötigt wird, kann dem ersten Argument true übergeben 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.

Abrufen der Anfragemethode

$method = $request->method();

Der Rückgabewert kann einer von GET, POST, PUT, DELETE, OPTIONS, HEAD sein.

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();

Abrufen der Anfrage-URI

$uri = $request->uri();

Gibt die angeforderte URI zurück, einschließlich Pfad- und Query-String-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 beispielsweise auf http://127.0.0.1:8080/user/get.php?uid=10&type=2 zugreift, wird /user/get.php?uid=10&type=2 zurückgegeben.

Abrufen des Anfragepfads

$path = $request->path();

Gibt den angeforderten Pfadteil 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 beispielsweise auf http://127.0.0.1:8080/user/get.php?uid=10&type=2 zugreift, wird /user/get.php zurückgegeben.

Abrufen der Anfrage-Query-String

$query_string = $request->queryString();

Gibt den angeforderten Query-String-Teil 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 beispielsweise auf http://127.0.0.1:8080/user/get.php?uid=10&type=2 zugreift, wird uid=10&type=2 zurückgegeben.

Abrufen der Anfrage-HTTP-Version

$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();

Abrufen der Anfrage-Session-ID

$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();