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