EasySwooleフレームワークHyperrfCommandへのアクセス


倉庫住所
EasySwooleカスタムコマンドを試してみます
ファイルの作成

うんてん
$ 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

かなり簡潔だと言わざるを得ない.
改造する
次に、コードの一部を改造し、EasySwooleにHyperrfのCommandを挿入しましょう.
EasysSwooleの動作モードは非常に簡単で、すべてのコマンドがCommandContainerに保存されているので、エントリファイルを大きく修正して、その中のコマンドをすべて調べて、動的にHyperfCommandに翻訳して、そのままHyperfCommandを実行すればいいです.easyswooleコマンドラインと衝突しないように、新規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):

...

コンポーネントに追加"hyperf/command": "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"
        }
    }
}

CommandInterfaceの引き継ぎEasySwooleCommandすべてを引き継ぐCommandInterfaceを作成しましょう.
commandName());
        $this->command = $command;
    }

    public function configure()
    {
        $this->addOption('args', 'a', InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'EasySwoole   ', []);
    }

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

追加Applicationすべて初期化CommandContainerのうちCommand.
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();
    }
}

最後にエントリ関数を改造する
");
}

//     CommandContainer
CommandRunner::getInstance();

if (file_exists(EASYSWOOLE_ROOT . '/bootstrap.php')) {
    require_once EASYSWOOLE_ROOT . '/bootstrap.php';
}

Application::getInstance()-?>run();

命令実行demo:command
$ php hyperf.php demo:command
string(11) "Hello World"


 [OK] success


起動Server
$ php hyperf.php start -a produce

HyperrfCommandの作成
次に、HyperfCommand効果を見てみましょう.

修正bootstrap.php
set(new DemoCommand());
Application::getInstance()->add(new Demo2Command());

実行結果
$ php hyperf.php demo:command2
string(21) "Hello Hyperf Command."

最後に書く
HyperfSwoole 4.4+に基づく高性能・高柔軟性を実現するPHP連携フレームワークであり、連携サーバおよび多数の常用コンポーネントを内蔵し、従来のPHP-FPMに基づくフレームワークよりも性能が質的に向上し、超高性能を提供するとともに、極めて柔軟な拡張性を保ち、標準コンポーネントはPSR標準に基づいて実現され、強い依存注入設計に基づいている.ほとんどのコンポーネントまたはクラスが置換可能で多重化可能であることを保証します.
フレームワークコンポーネントライブラリには、一般的なスレッド版のMySQLクライアント、Redisクライアントのほか、スレッド版のEloquent ORM、WebSocketサービス側およびクライアント、JSON RPCサービス側およびクライアント、GRPCサービス側およびクライアント、Zipkin/Jaegerクライアント、Guzzle HTTPクライアント、Elasticsearchクライアント、Consulクライアント、ETCDクライアント、AMQPコンポーネント、Apolloコンフィギュレーションセンター、アリクラウドACMアプリケーションコンフィギュレーション管理、ETCDコンフィギュレーションセンター、トークンバケツアルゴリズムに基づくストッパ、汎用接続プール、ヒューズ、Swaggerドキュメント生成、Swoole Tracker、BladeおよびSmartyビューエンジン、SnowflakeグローバルIDジェネレータなどのコンポーネントは、自分で対応するスレッドバージョンを実現する手間を省く.
Hyperrfは、PSR-11ベースの依存注入コンテナ、注釈、AOPフェースプログラミング、PSR-15ベースのミドルウェア、カスタムプロセス、PSR-14ベースのイベントマネージャ、Redis/RabbitMQメッセージキュー、自動モデルキャッシュ、PSR-16ベースのキャッシュ、Crontab秒レベルのタイミングタスク、Translation国際化、Validationベリファイアなど、非常に便利な機能を提供しています.豊富なテクノロジーシーンとビジネスシーンを満たし、開梱してすぐに使用できます.