Skip to content

It is extremely important that HyperF processes do not overwrite shared variable data. This can occur with overload.

License

Notifications You must be signed in to change notification settings

thiagoeti/php-hyperf-overlapping-concurrency

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

PHP HyperF -> Overlapping and Concurrency

  • PHP: 8.3.7
  • PHP HyperF: 3.1.23

Image

HyperF - Project

It is extremely important that HyperF processes do not overwrite shared variable data. This can occur with overload.

Create - Project

composer create-project hyperf/hyperf-skeleton "project"

Install - Watcher

composer require hyperf/watcher --dev

Install - UUID

composer require ramsey/uuid

Server - Start

cd project ;
php bin/hyperf.php server:watch ;

HyperF - APP

APP - Router

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');

path: /project/config/routes.php

APP - Controller - Overlapping

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

}

path: /project/app/Controller/ControllerOverlapping.php

APP - Controller - Control

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

}

path: /project/app/Controller/ControllerConcurrency.php

Execute

GET - Concurrency

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'

GET - Control

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: ''

About

It is extremely important that HyperF processes do not overwrite shared variable data. This can occur with overload.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages