Açıklama

Workerman, 4.x sürümünden itibaren HTTP hizmetini güçlendirdi. Bir istek sınıfı, bir yanıt sınıfı, bir oturum sınıfı ve SSE entegre edildi. Workerman'in HTTP hizmetlerini kullanmak istiyorsanız, workerman 4.x veya daha yeni sürümlerini şiddetle öneririz.

Aşağıdaki tüm kullanımlar workerman 4.x sürümleri içindir ve workerman 3.x sürümleriyle uyumlu değildir.

İstek Objesine Erişim

İstek objesi, her durumda onMessage geri çağrı işlevinde alınır. Çerçeve otomatik olarak Request objesini geri çağırma işlevinin ikinci parametresi olarak iletecektir.

Örnek

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 istek objesi, burada herhangi bir işlem yapmadan doğrudan tarayıcıya hello mesajını gönderiyor.
    $connection->send("hello");
};

// İşçiyi çalıştırma
Worker::runAll();

Tarayıcı http://127.0.0.1:8080 adresine eriştiğinde hello yanıtını alacaktır.

GET İstek Parametrelerini Almak

Tüm GET dizisini almak

$get = $request->get();

Eğer istekte GET parametresi yoksa boş bir dizi döndürülür.

Belirli bir GET değerini almak

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

Eğer GET dizisi bu değeri içermiyorsa null döner.

Ayrıca get yöntemine ikinci bir parametre olarak bir varsayılan değer iletebilirsiniz. Eğer GET dizisi içinde ilgili değer bulunamazsa varsayılan değer dönecektir. Örneğin:

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

Örnek

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'));
};

// İşçiyi çalıştırma
Worker::runAll();

Tarayıcı http://127.0.0.1:8080?name=jerry&age=12 adresine eriştiğinde jerry yanıtını alacaktır.

POST İstek Parametrelerini Almak

Tüm POST dizisini almak

$post = $request->post();

Eğer istekte POST parametresi yoksa boş bir dizi döndürülür.

Belirli bir POST değerini almak

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

Eğer POST dizisi bu değeri içermiyorsa null döner.

GET yöntemiyle aynı şekilde, post yöntemine ikinci bir parametre olarak bir varsayılan değer iletebilirsiniz. Eğer POST dizisi içinde ilgili değer bulunamazsa varsayılan değer dönecektir. Örneğin:

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

Örnek

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

// İşçiyi çalıştırma
Worker::runAll();

Raw Body İle İstek Post Paketini Almak

$post = $request->rawBody();

Bu özellik, php-fpm içindeki file_get_contents("php://input"); işlemine benzer. HTTP özgün istek paketini almak için kullanılır. Bu, application/x-www-form-urlencoded formatında olmayan post istek verilerini almak için çok kullanışlıdır.

Örnek

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');
};

// İşçiyi çalıştırma
Worker::runAll();

Header Almak

Tüm header dizisini almak

$headers = $request->header();

Eğer istekte header parametresi yoksa boş bir dizi döndürülür. Tüm anahtarlar küçük harfle döndürülür.

Belirli bir header değerini almak

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

Eğer header dizisi bu değeri içermiyorsa null döner. Tüm anahtarlar küçük harfle döndürülür.

GET yöntemiyle aynı şekilde, header yöntemine ikinci bir parametre olarak bir varsayılan değer iletebilirsiniz. Eğer header dizisi içinde ilgili değer bulunamazsa varsayılan değer dönecektir. Örneğin:

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

Örnek

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');
    }    
};

// İşçiyi çalıştırma
Worker::runAll();

Cookie Almak

Tüm cookie dizisini almak

$cookies = $request->cookie();

Eğer istekte cookie parametresi yoksa boş bir dizi döndürülür.

Belirli bir cookie değerini almak

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

Eğer cookie dizisi bu değeri içermiyorsa null döner.

GET yöntemiyle aynı şekilde, cookie yöntemine ikinci bir parametre olarak bir varsayılan değer iletebilirsiniz. Eğer cookie dizisi içinde ilgili değer bulunamazsa varsayılan değer dönecektir. Örneğin:

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

Örnek

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

// İşçiyi çalıştırma
Worker::runAll();

Dosya Yüklemeleri Almak

Tüm dosya yüklemeleri dizisini almak

$files = $request->file();

Dönen dosya formatı şuna benzer:

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',
      )
)

Burada:

  • name dosya adıdır
  • tmp_name diskteki geçici dosya konumu
  • size dosya boyutu
  • error hata kodu
  • type dosya tipi.

Notlar:

  • Dosya yükleme boyutu defaultMaxPackageSize sınırına tabidir, varsayılan olarak 10M, değiştirilebilir.
  • İstek sona erdikten sonra dosyalar otomatik olarak temizlenecektir.
  • Eğer istekte dosya yüklemesi yoksa boş bir dizi döndürülür.

Belirli bir dosya yüklemesi almak

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

Şuna benzer bir çıktı döner:

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

Eğer yüklenen dosya yoksa null döner.

Örnek

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');
};

// İşçiyi çalıştırma
Worker::runAll();

Host Almak

İstek yapılan host bilgisini alır.

$host = $request->host();

Eğer isteğin adresi standart olmayan 80 veya 443 port değilse, host bilgisi portu ile birlikte gelebilir, örneğin example.com:8080. Port gerekmiyorsa, ilk parametre olarak true geçirilebilir.

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

Örnek

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'ı çalıştır
Worker::runAll();

Tarayıcı http://127.0.0.1:8080?name=tom adresine gittiğinde 127.0.0.1:8080 döndürür.

İstek Yöntemini Almak

$method = $request->method();

Dönüş değeri GET, POST, PUT, DELETE, OPTIONS, HEAD içinden biri olabilir.
Örnek

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'ı çalıştır
Worker::runAll();

İstek URI'sini Almak

$uri = $request->uri();

İstek URI'sini, path ve queryString kısmını içeren şekilde döndürür.
Örnek

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'ı çalıştır
Worker::runAll();

Tarayıcı http://127.0.0.1:8080/user/get.php?uid=10&type=2 adresine gittiğinde /user/get.php?uid=10&type=2 döndürür.

İstek Yolunu Almak

$path = $request->path();

İstek path kısmını döndürür.
Örnek

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'ı çalıştır
Worker::runAll();

Tarayıcı http://127.0.0.1:8080/user/get.php?uid=10&type=2 adresine gittiğinde /user/get.php döndürür.

İstek QueryString'ini Almak

$query_string = $request->queryString();

İstek queryString kısmını döndürür.
Örnek

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'ı çalıştır
Worker::runAll();

Tarayıcı http://127.0.0.1:8080/user/get.php?uid=10&type=2 adresine gittiğinde uid=10&type=2 döndürür.

İstek HTTP Sürümünü Almak

$version = $request->protocolVersion();

Döndürülen değer 1.1 veya 1.0 olabilir.
Örnek

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'ı çalıştır
Worker::runAll();

İstek Session ID'sini Almak

$sid = $request->sessionId();

Harf ve rakamlardan oluşan bir dize döndürür.
Örnek

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'ı çalıştır
Worker::runAll();