Locker कॉरoutine लॉक

Locker एक मेमोरी लॉक है, जो कोरूटीन के बीच समन्वय के लिए उपयोग किया जाता है। यह सामान्यतः कोरूटीन के बीच किसी विशेष सामयिक संसाधन, जैसे कि जब किसी डेटाबेस घटक में कनेक्शन पूल न हो, तब उस घटक का उपयोग करने के लिए कतार बनाने के लिए प्रयोग किया जाता है। इससे कई कोरूटीनों द्वारा एक ही कनेक्शन संसाधन का एक साथ उपयोग करने के परिणामस्वरूप डेटा असंगति से बचा जा सकता है।

नोट
इस विशेषता के लिए workerman>=5.1.0 की आवश्यकता है

ध्यान दें

  • Locker Swoole/Swow/Fiber/Select/Event संचालित को सपोर्ट करता है
  • Locker एक ही प्रक्रिया में विभिन्न कोरूटीनों के बीच कतार में आपसी एक्सेस के लिए उपयोग किया जाता है, प्रक्रियाओं के बीच कोई प्रभावित नहीं होता
<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Locker;
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) {
    static $redis;
    if (!$redis) {
        $redis = new Redis();
        $redis->connect('127.0.0.1', 6379);
    }
    // एक ही कनेक्शन का एक साथ उपयोग करने से बचें, जैसे "Socket#10 has already been bound to another coroutine" त्रुटि
    Locker::lock('redis');
    $time = $redis->time();
    Locker::unlock('redis');
    $connection->send(json_encode($time));
};

Worker::runAll();

इंटरफेस विवरण

interface LockerInterface
{
    /**
     * लॉक लगाना
     */
    public static function lock(string $key): bool

    /**
     * लॉक हटाना
     */
    public static function unlock(string $key): bool
}