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;

}