Context Koşul Çerçevesi
Context, veritabanı bağlantısı, kullanıcı bilgileri gibi bağlam bilgilerini saklamak ve iletmek için kullanılır. Her bir koroutinin kendi bağlamı vardır, farklı koroutinler arasındaki bağlamlar izole edilmiştir.
Dikkat
Alt düzey, sürücü türünü otomatik olarak tanır, yalnızca Swoole/Swow/Fiber sürücülerini destekler.İpucu
Bu özellik workerman>=5.1.0 gerektirir.
<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine;
use Workerman\Coroutine\Context;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Veya Swow::class veya Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
// Geçerli koroutinde context verilerini ayarla
Context::set('user_info', ['id' => 1, 'name' => 'name']);
// Yeni bir koroutin oluştur
Coroutine::create(function () use ($connection) {
// Koroutinler arası context verileri izole edildiği için yeni korutinde null alınıyor
$userInfo = Context::get('user_info');
var_dump($userInfo); // null çıktısını verir
});
// Geçerli korutinin context verilerini al
$userInfo = Context::get('user_info'); // ['id' => 1, 'name' => 'name'] döndürülür
$connection->send(json_encode($userInfo));
};
Worker::runAll();
Arayüz Açıklaması
interface ContextInterface
{
/**
* Bağlam içindeki değeri al
*/
public static function get(string $name, mixed $default = null): mixed;
/**
* Bağlam içindeki değeri ayarla
*/
public static function set(string $name, mixed $value): void;
/**
* Bağlamda belirtilen adın değerinin var olup olmadığını kontrol et
*/
public static function has(string $name): bool;
/**
* Geçerli korutinin bağlamını sıfırla
*/
public static function reset(?ArrayObject $data = null): void;
/**
* Bağlamı yok et
*/
public static function destroy(): void;
}