Açıklama

Workerman 4.x sürümünden itibaren HTTP hizmet desteğini güçlendirmiştir. İstek sınıfı, yanıt sınıfı, oturum sınıfı ve SSE tanıtılmıştır. Workerman'ın HTTP hizmetlerini kullanmak istiyorsanız, Workerman 4.x veya sonraki daha yüksek sürümleri kullanmanız şiddetle önerilir.

Aşağıdakilerin hepsi Workerman 4.x sürümünün kullanım şeklidir, Workerman 3.x ile uyumlu değildir.

İstek nesnesini alma

İstek nesnesi her zaman onMessage geri çağırma fonksiyonu içinde elde edilir, çerçeve Request nesnesini geri çağırma fonksiyonunun ikinci parametresi aracılığıyla otomatik 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 nesnesidir; burada istek nesnesi üzerinde herhangi bir işlem yapılmadan tarayıcıya hello döndürülüyor
    $connection->send("hello");
};

// Worker'ı çalıştır
Worker::runAll();

Tarayıcı http://127.0.0.1:8080 adresini ziyaret ettiğinde hello döndürülecektir.

İstek parametrelerini alma get

Tüm get dizisini alma

$get = $request->get();

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

Get dizisindeki belirli bir değeri alma

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

Eğer get dizisinde bu değer yoksa null döner.

İkinci parametreye varsayılan bir değer de verebilirsiniz. Eğer get dizisinde karşılık gelen değer bulunmazsa varsayılan değer döndürülür. Ö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'));
};

// Worker'ı çalıştır
Worker::runAll();

Tarayıcı http://127.0.0.1:8080?name=jerry&age=12 adresini ziyaret ettiğinde jerry döndürülecektir.

İstek parametrelerini alma post

Tüm post dizisini alma

$post = $request->post();

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

Post dizisindeki belirli bir değeri alma

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

Eğer post dizisinde bu değer yoksa null döner.

Get metoduyla aynı şekilde, post metoduna da ikinci bir parametreyle varsayılan değer verebilirsiniz. Eğer post dizisinde karşılık gelen değer bulunmazsa varsayılan değer döndürülür. Ö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));
};

// Worker'ı çalıştır
Worker::runAll();

Ham istek post gövdesini alma

$post = $request->rawBody();

Bu işlev, php-fpm içindeki file_get_contents("php://input"); işlemiyle benzerlik gösterir. HTTP'nin ham istek gövdesini elde etmek için kullanılır. Bu, application/x-www-form-urlencoded formatındaki post istek verilerini almak için oldukça yararlı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');
};

// Worker'ı çalıştır
Worker::runAll();

Header alma

Tüm header dizisini alma

$headers = $request->header();

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

Header dizisindeki belirli bir değeri alma

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

Eğer header dizisinde bu değer yoksa null döner. Tüm anahtarların küçük harfle yazıldığını unutmayın.

Get metoduyla aynı şekilde, header metoduna da ikinci bir parametreyle varsayılan değer verebilirsiniz. Eğer header dizisinde karşılık gelen değer bulunmazsa varsayılan değer döndürülür. Ö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');
    }    
};

// Worker'ı çalıştır
Worker::runAll();

Cookie alma

Tüm cookie dizisini alma

$cookies = $request->cookie();

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

Cookie dizisindeki belirli bir değeri alma

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

Eğer cookie dizisinde bu değer yoksa null döner.

Get metoduyla aynı şekilde, cookie metoduna da ikinci bir parametreyle varsayılan değer verebilirsiniz. Eğer cookie dizisinde karşılık gelen değer bulunmazsa varsayılan değer döndürülür. Ö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));
};

// Worker'ı çalıştır
Worker::runAll();

Yüklenen dosyaları alma

Tüm yüklenen dosya dizisini alma

$files = $request->file();

Dönen dosya formatı şöyle görünür:

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ı
  • tmp_name = disk üzerindeki geçici dosya konumu
  • size = dosya boyutu
  • error = hata kodu
  • type = dosya mine tipi.

Dikkat:

  • Yüklenen dosya boyutu, defaultMaxPackageSize tarafından sınırlandırılır, varsayılan 10M'dır, değiştirilebilir.

  • İstek sona erdiğinde dosyalar otomatik olarak temizlenecektir.

  • Eğer istekte yüklenen dosya yoksa, boş bir dizi döndürülür.

Belirli bir yüklenen dosyayı alma

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

Dönen değer şöyle görünür:

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('yükleme başarısız');
};

// Worker'ı çalıştır
Worker::runAll();

Host alma

İsteğin host bilgilerini alma.

$host = $request->host();

Eğer isteğin adresi standart 80 veya 443 portu değilse, host bilgisi portu içerebilir, örneğin example.com:8080. Eğer port istemiyorsanız ilk parametreye true verebilirsiniz.

$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 adresini ziyaret ettiğinde 127.0.0.1:8080 döndürülecektir.

İstek yöntemini alma

$method = $request->method();

Dönen değer GET, POST, PUT, DELETE, OPTIONS, HEAD gibi bir değerdir.

Ö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 alma

$uri = $request->uri();

İsteğin uri'sini, path ve queryString kısmını içerir.

Ö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 adresini ziyaret ettiğinde /user/get.php?uid=10&type=2 döndürülecektir.

İstek yolunu alma

$path = $request->path();

İsteğin 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 adresini ziyaret ettiğinde /user/get.php döndürülecektir.

İstek queryString'ini alma

$query_string = $request->queryString();

İsteğin 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 adresini ziyaret ettiğinde uid=10&type=2 döndürülecektir。

İstek HTTP sürümünü alma

$version = $request->protocolVersion();

Dönen değer 1.1 veya 1.0 şeklindedir.

Ö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 sessionId'sini alma

$sid = $request->sessionId();

Dönen değer, harf ve rakamlardan oluşan bir dizedir.

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