«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > PHP HyperF → Перекрытие и параллелизм

PHP HyperF → Перекрытие и параллелизм

Опубликовано 2 августа 2024 г.
Просматривать:503

PHP HyperF -> Перекрытие и параллелизм Перекрытие и параллелизм" />

  • PHP: 8.3.7
  • PHP HyperF: 3.1.23

ГиперФ - Проект

Очень важно, чтобы процессы HyperF не перезаписывали данные общих переменных. Это может произойти при перегрузке.

Создать — Проект

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

Установить - Наблюдатель

composer require hyperf/watcher --dev

Установить - UUID

composer require ramsey/uuid

Сервер — Старт

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

HyperF – приложение

Приложение — Маршрутизатор

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

Выполнять

GET — параллелизм

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

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/thiagoeti/php-hyperf-overlapping-and-concurrency-35ja?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3