Sobreposição e simultaneidade" />
É extremamente importante que os processos HyperF não substituam dados variáveis compartilhados. Isso pode ocorrer com sobrecarga.
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');
caminho: /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; } }
caminho: /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; } }
caminho: /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
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3