myqee / hyperf
MyQEE server library for Hyperf.
v1.1.4
2020-04-14 09:08 UTC
Requires
- php: >=7.2
- ext-swoole: >=4.4
- hyperf/command: ~1.1.0
- hyperf/config: ~1.1.0
- hyperf/di: ~1.1.0
- hyperf/logger: ~1.1.0
- hyperf/server: ~1.1.0
- myqee/server: ~2.1.0
- psr/http-server-middleware: ~1.0.0
Requires (Dev)
- myqee/server: dev-master
README
这是一个使得 MyQEE Server 可以兼容使用 Hyperf 的模块 (see https://www.hyperf.io )。Hyperf 是一个在 php7.2 和 swoole 4.4 基础上开发的 PHP 协程框架,具有强大的依赖注入功能以及功能丰富的组件,如果你以前熟悉 Laravel、Symfory 等框架,则会非常容易上手使用。
使用方法
在已有 MyQEE Server 项目中启用
- 下载 https://github.com/hyperf-cloud/hyperf-skeleton/archive/master.zip Hyperf 的骨骼代码,github地址:https://github.com/hyperf-cloud/hyperf-skeleton
- 解压缩,将
config
目录及bin/hyperf.php
文件复制到你的项目; - 执行
composer require myqee/hyperf
安装依赖;
如果你还需要
hyperf
的其它依赖内容,可参考 composer.json 中 require 部分,复制到你的 composer.json 文件中并执行composer update
或composer require hyperf/***
安装对应模块;
使用 hyperf/skeleton 骨骼结构安装
- 创建新文件夹,运行
composer create-project hyperf/hyperf-skeleton
,参考 https://doc.hyperf.io/#/zh/quick-start/install - 执行
composer require myqee/hyperf
配置
MyQEE 相关配置可以放在 config/autoload/myqee.php
中,也可放在 config/config.php
里的数组 myqee 里。
差异事项
- 使用DI兼容处理了 hyperf/config;
- 使用DI将默认Logger处理设置为了MyQEE的Logger处理方法;
- 取代了 hyperf/server 的 start 命令并保持兼容;
- 对于http服务器,若使用了
Hyperf\HttpServer\Server::class, 'onRequest'
回调(在config/autoload/server.php中默认设置),系统会使用一个中间件处理,优先处理 Hyperf 默认的 http 逻辑,若不存在对应路由则使用MyQEE Server默认的路由规则;
虽然取代了以上功能但是和原来功能保持兼容。
高级使用
创建一个自己的启动命令
首先,请简单的阅读并理解 https://doc.hyperf.io/#/zh/command
中关于命令行的说明。以下是一个简单的示例:
<?php declare(strict_types=1); namespace App\Command; use Hyperf\Contract\ConfigInterface; use MyQEE\Hyperf\ServerHyperfFactory; use Hyperf\Command\Annotation\Command; use Psr\Container\ContainerInterface; use Symfony\Component\Console\Command\Command as SymfonyCommand; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * 放在 app/Command/StartTestServer.php * 或者 `config/autoload/annotations.php` 中设置的 scan 会扫描目录中 * @Command */ class StartTestServer extends SymfonyCommand { /** * @var ContainerInterface */ private $container; protected $description = 'Start the test server.'; public function __construct(ContainerInterface $container) { parent::__construct('server:test'); // 命令名称 $this->container = $container; } protected function configure() { $this->setDescription($this->description); $this->addOption('daemon', 'd', InputOption::VALUE_NONE, 'daemonize server process'); } protected function parseOption(InputInterface $input) { /** * @var $configFactory \MyQEE\Hyperf\Config */ $configFactory = $this->container->get(ConfigInterface::class); $config = $configFactory->get('myqee'); $daemon = $input->getOption('daemon'); if ($daemon) { $config['swoole']['daemonize'] = 1; } $configFactory->set('myqee', $config); } protected function execute(InputInterface $input, OutputInterface $output) { \Swoole\Runtime::enableCoroutine(true); # 处理自定义的参数(可选) --------------- $this->parseOption($input); # 启动服务 -------------------------- /** * @var $serverFactory ServerHyperfFactory */ $serverFactory = $this->container->get(ServerHyperfFactory::class); # 安装服务 $serverFactory->setup(); # 服务启动 $serverFactory->start(); # --------------------------------- # 若不想启动服务器,而是直接cli执行一些任务,但是又希望Config生效(比如log、php的ini等) # 可以这样做: /** * @var $configFactory \MyQEE\Hyperf\Config */ $configFactory = $this->container->get(ConfigInterface::class); # 这样配置就会初始化 $configFactory->setup(); // do something // ...... } }
更多
可以将原来 MyQEE 用到的配置放在 config/autoload/myqee.php
中(不存在,需要自己创建),这样启动时可以自动加载。