Рубрики
Uncategorized

Доступ к платформе Easysool к гиперкоманде

Автор оригинала: David Wong.

Адрес склада

Попробуйте пользовательские команды easysool

создайте файл

php

declare(strict_types=1);

namespace App\Command;

use EasySwoole\EasySwoole\Command\CommandInterface;

class DemoCommand implements CommandInterface
{
    public function commandName(): string
    {
        return 'demo:command';
    }

    public function exec(array $args): ?string
    {
        var_dump('Hello World');

        return 'success';
    }

    public function help(array $args): ?string
    {
        return 'help';
    }
}

Функция

$ php easyswoole
  ______                          _____                              _
 |  ____|                        / ____|                            | |
 | |__      __ _   ___   _   _  | (___   __      __   ___     ___   | |   ___
 |  __|    / _` | / __| | | | |  \___ \  \ \ /\ / /  / _ \   / _ \  | |  / _ \
 | |____  | (_| | \__ \ | |_| |  ____) |  \ V  V /  | (_) | | (_) | | | |  __/
 |______|  \__,_| |___/  \__, | |_____/    \_/\_/    \___/   \___/  |_|  \___|
                          __/ |
                         |___/
Welcome To EASYSWOOLE Command Console!
Usage: php easyswoole [command] [arg]
Get help : php easyswoole help [command]
Current Register Command:
demo:command
help
install
start
stop
reload
phpunit

$ php easyswoole demo:command
string(11) "Hello World"
success

Я должен сказать, что это довольно просто.

Реформа

Затем давайте преобразуем часть кода и подключим команду hyperf к easysool.

Easysool очень прост, все команды сохраняются в CommandContainer , поэтому мы можем изменить файл ввода, узнать все команды в нем и динамически перевести их в Гиперкоманда , а затем запустите ее напрямую Гиперкоманда Просто отлично.

Чтобы не возникал конфликт easyswool/| командной строки, давайте создадим новый hyperf Хорошо.

Сначала мы создаем компонент

$ composer create hyperf/component-creater hyperf
Installing hyperf/component-creater (v1.1.1)
  - Installing hyperf/component-creater (v1.1.1): Downloading (100%)
Created project in hyperf
> Installer\Script::install
Setting up optional packages
What is your component name (hyperf/demo): hyperf-cloud/easyswoole-command
What is your component license (MIT) :
What is your component description : HyperfCommand for EasySwoole
What is your namespace (HyperfCloud\EasyswooleCommand):
Removing installer development dependencies

  Do you want to use hyperf/framework component ?
  [1] yes
  [n] None of the above
  Make your selection or type a composer package name and version (n):

  Do you want to use hyperf/di component ?
  [1] yes
  [n] None of the above
  Make your selection or type a composer package name and version (n):

...

И добавьте компоненты "гипер/команда": "1.1.*" Зависимость.

Измените корневой каталог ниже composer.json

{
    "require": {
        "easyswoole/easyswoole": "3.x",
        "hyperf-cloud/easyswoole-command": "dev-master"
    },
    "require-dev": {
        "swoft/swoole-ide-helper": "^4.2",
        "friendsofphp/php-cs-fixer": "^2.14",
        "mockery/mockery": "^1.0",
        "phpstan/phpstan": "^0.11.2"
    },
    "autoload": {
        "psr-4": {
            "App\": "App/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "config": {
        "sort-packages": true
    },
    "scripts": {
        "test": "co-phpunit -c phpunit.xml --colors=always",
        "cs-fix": "php-cs-fixer fix $1",
        "analyse": "phpstan analyse --memory-limit 300M -l 0 -c phpstan.neon ./App"
    },
    "repositories": {
        "hyperf": {
            "type": "path",
            "url": "./hyperf"
        },
        "packagist": {
            "type": "composer",
            "url": "https://mirrors.aliyun.com/composer"
        }
    }
}

Возьмите на себя командный интерфейс

Давайте создадим Команду easyswool/|, чтобы взять на себя все Командный интерфейс

commandName());
        $this->command = $command;
    }

    public function configure()
    {
        $this - > addoption ('args','a ', inputoption:: value \ is \ array | inputoption:: value \ optional,' easysoole input ', []);
    }

    public function handle()
    {
        $args = $this->input->getOption('args');

        if (in_array('produce', $args)) {
            Core::getInstance()->setIsDev(false);
        }
        Core::getInstance()->initialize();

        $result = $this->command->exec($args);

        $this->output->success($result);
    }
}

увеличение Применение Инициализировать все CommandContainer Среда Команда

getCommandList();

        foreach ($list as $name) {
            $this->commands[] = new EasySwooleCommand($container->get($name));
        }
    }

    public function add(Command $command)
    {
        $this->commands[] = $command;
    }

    public function run()
    {
        $application = new SymfonyApplication();
        foreach ($this->commands as $command) {
            $application->add($command);
        }

        return $application->run();
    }
}

Функция ввода окончательного преобразования

run();

Исполнительный приказ демонстрация:команда

$ php hyperf.php demo:command
string(11) "Hello World"


 [OK] success

запуск Сервер

$ php hyperf.php start -a produce

Создать гиперкоманду

Далее мы создадим Гиперкоманда Посмотрите на эффект.

изменить bootstrap.php

set(new DemoCommand());
Application::getInstance()->add(new Demo2Command());

результаты правоприменения

$ php hyperf.php demo:command2
string(21) "Hello Hyperf Command."

Написано в конце

Hyperf-это высокопроизводительная и гибкая платформа для взаимодействия с PHP, основанная на swool 4.4 +. Он имеет встроенный сервер взаимодействия и большое количество часто используемых компонентов. По сравнению с традиционным фреймворком, основанным на php-fpm, его производительность качественно улучшена. Он обеспечивает сверхвысокую производительность при сохранении чрезвычайно гибкой масштабируемости. Стандартные компоненты реализованы на основе стандарта PSR и основаны на сильной конструкции внедрения зависимостей, которая гарантирует, что большинство компонентов или классов являются заменяемыми и многоразовыми.

В дополнение к общему клиенту MySQL и клиенту redis версии для совместной работы библиотека компонентов платформы также предоставляет вам красноречивый ORM, сервер и клиент websocket, сервер и клиент JSON RPC, сервер и клиент grpc, клиент Zipkin/Jaeger (opentracing), HTTP-клиент, клиент elasticsearch, клиент консультаций, клиент etcd, компонент QP версии для совместной работы, центр конфигурации Apollo, управление конфигурацией приложений Alibaba cloud ACM, центр конфигурации etcd, ограничитель тока на основе алгоритма набора токенов, общий пул соединений, предохранитель, генерация документов swagger, swool tracker, движок blade и Smarty view, генератор глобальных идентификаторов snowflake и другие компоненты избавляют от необходимости внедрять соответствующую версию программы.

Hyperf также предоставляет контейнер для инъекций зависимостей на основе psr-11, аннотации, ориентированное на аспекты программирование AOP, промежуточное программное обеспечение на основе psr-15, пользовательский процесс, менеджер событий на основе psr-14, очередь сообщений redis/rabbitmq, автоматический кэш моделей, кэш на основе psr-16, временная задача второго уровня crontab, интернационализация перевода, валидатор проверки и другие очень удобные функции , чтобы соответствовать богатым техническим и бизнес-сценариям, из коробки.