重疊和並發" />
HyperF 進程不要覆蓋共享變數數據,這一點極為重要。過載時可能會發生這種情況。
composer create-project hyperf/hyperf-skeleton "project"
composer require hyperf/watcher --dev
composer require ramsey/uuid
cd project ; php bin/hyperf.php server:watch ;
Router::addRoute(['GET', 'POST'], '/overlapping/data', 'App\Controller\ControllerOverlapping@data'); Router::addRoute(['GET', 'POST'], '/overlapping/value-a', 'App\Controller\ControllerOverlapping@value_a'); Router::addRoute(['GET', 'POST'], '/overlapping/value-b', 'App\Controller\ControllerOverlapping@value_b'); Router::addRoute(['GET', 'POST'], '/overlapping/value-c', 'App\Controller\ControllerOverlapping@value_c'); Router::addRoute(['GET', 'POST'], '/concurrency/data', 'App\Controller\ControllerConcurrency@data'); Router::addRoute(['GET', 'POST'], '/concurrency/value-a', 'App\Controller\ControllerConcurrency@value_a'); Router::addRoute(['GET', 'POST'], '/concurrency/value-b', 'App\Controller\ControllerConcurrency@value_b'); Router::addRoute(['GET', 'POST'], '/concurrency/value-c', 'App\Controller\ControllerConcurrency@value_c');
路徑:/project/config/routes.php
namespace App\Controller; class ControllerOverlapping { public $data; public function __construct() { $this->data=''; } public function data() { return $this->data; } public function value_a() { $this->data='Value A'; return $this->data; } public function value_b() { $this->data='Value B'; return $this->data; } public function value_C() { $this->data='Value C'; return $this->data; } }
路徑:/project/app/Controller/ControllerOverlapping.php
namespace App\Controller; use Ramsey\Uuid\Uuid; class ControllerConcurrency { public $data; public function __construct() { $this->data=array(); } public function start() { $key=Uuid::uuid4()->toString(); return $key; } public function end($key) { $data=$this->data[$key]; unset($this->data[$key]); return $data; } public function data() { return $this->data; } public function value_a() { $key=$this->start(); $this->data[$key]='Value A'; $data=$this->end($key); return $data; } public function value_b() { $key=Uuid::uuid4()->toString(); $this->data[$key]='Value B'; $data=$this->end($key); return $data; } public function value_C() { $key=Uuid::uuid4()->toString(); $this->data[$key]='Value C'; $data=$this->end($key); return $data; } }
路徑:/project/app/Controller/ControllerConcurrency.php
curl "http://127.0.0.1:9501/overlapping/data" Result: '' curl "http://127.0.0.1:9501/overlapping/value-a" Result: 'Value A' curl "http://127.0.0.1:9501/overlapping/data" Result: 'Value A' curl "http://127.0.0.1:9501/overlapping/value-b" Result: 'Value B' curl "http://127.0.0.1:9501/overlapping/data" Result: 'Value B'
curl "http://127.0.0.1:9501/concurrency/data" Result: '' curl "http://127.0.0.1:9501/concurrency/value-a" Result: 'Value A' curl "http://127.0.0.1:9501/concurrency/data" Result: '' curl "http://127.0.0.1:9501/concurrency/value-b" Result: 'Value B' curl "http://127.0.0.1:9501/concurrency/data" Result: '' curl "http://127.0.0.1:9501/concurrency/value-a" && \ curl "http://127.0.0.1:9501/concurrency/value-a" && \ curl "http://127.0.0.1:9501/concurrency/value-c" ; Result: 'Value A', 'Value B', 'Value C' curl "http://127.0.0.1:9501/concurrency/data" Result: ''
https://github.com/thiagoeti/php-hyperf-overlapping-concurrency
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3