Context السياق التعاوني

يستخدم Context لتخزين ونقل معلومات السياق في التعاونيات، مثل اتصالات قاعدة البيانات ومعلومات المستخدم، إلخ. كل تعاون له سياقه الخاص، والسياقات بين التعاونيات المختلفة معزولة.

ملحوظة
يتم التعرف تلقائيًا على نوع السائق في الأسفل، ويدعم فقط سويول/Swow/Fiber

تلميح
هذه الميزة تتطلب workerman>=5.1.0

<?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; // أو Swow::class أو Fiber::class

$worker->onMessage = function (TcpConnection $connection, Request $request) {
    // إعداد بيانات السياق في التعاون الحالي
    Context::set('user_info', ['id' => 1, 'name' => 'name']);
    // إنشاء تعاون جديد
    Coroutine::create(function () use ($connection) {
        // بيانات السياق بين التعاونيات معزولة، لذا فإن ما يتم الحصول عليه في التعاون الجديد هو null
        $userInfo = Context::get('user_info');
        var_dump($userInfo); // يخرج null
    });
    // الحصول على بيانات السياق الخاصة بالتعاون الحالي
    $userInfo = Context::get('user_info'); // يحصل على ['id' => 1, 'name' => 'name']
    $connection->send(json_encode($userInfo));
};

Worker::runAll();

وصف الواجهة

interface ContextInterface
{
    /**
     * الحصول على القيمة في السياق
     */
    public static function get(string $name, mixed $default = null): mixed;

    /**
     * ضبط القيمة في السياق
     */
    public static function set(string $name, mixed $value): void;

    /**
     * التحقق مما إذا كانت القيمة ذات الاسم المحدد موجودة في السياق
     */
    public static function has(string $name): bool;

    /**
     * إعادة تعيين سياق التعاون الحالي
     */
    public static function reset(?ArrayObject $data = null): void;

    /**
     * تدمير السياق
     */
    public static function destroy(): void;

}