Context 协oroutine Kontext
Der Kontext wird verwendet, um Kontextinformationen in Koroutinen zu speichern und zu übertragen, z. B. Datenbankverbindungen, Benutzerinformationen usw. Jede Koroutine hat ihren eigenen Kontext, die Kontexte verschiedener Koroutinen sind isoliert.
Hinweis
Der zugrunde liegende Treiber wird automatisch erkannt und unterstützt nur die Treiber Swoole/Swow/Fiber.Tipp
Diese Funktion benötigt 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; // Oder Swow::class oder Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
// Kontextdaten in der aktuellen Koroutine festlegen
Context::set('user_info', ['id' => 1, 'name' => 'name']);
// Neue Koroutine erstellen
Coroutine::create(function () use ($connection) {
// Kontextdaten zwischen Koroutinen sind isoliert, daher ist der Abruf in der neuen Koroutine null
$userInfo = Context::get('user_info');
var_dump($userInfo); // Ausgabe von null
});
// Kontextdaten der aktuellen Koroutine abrufen
$userInfo = Context::get('user_info'); // Ergebnis: ['id' => 1, 'name' => 'name']
$connection->send(json_encode($userInfo));
};
Worker::runAll();
Schnittstellenerklärung
interface ContextInterface
{
/**
* Wert im Kontext abrufen
*/
public static function get(string $name, mixed $default = null): mixed;
/**
* Wert im Kontext festlegen
*/
public static function set(string $name, mixed $value): void;
/**
* Überprüfen, ob ein Wert mit dem angegebenen Namen im Kontext vorhanden ist
*/
public static function has(string $name): bool;
/**
* Den aktuellen Koroutinenkontext zurücksetzen
*/
public static function reset(?ArrayObject $data = null): void;
/**
* Den Kontext zerstören
*/
public static function destroy(): void;
}