php高性能框架Hyperf

本文介绍了Hyperf框架的安装过程,包括基于swoole和swow的安装方法,以及如何使用Watcher实现热更新以方便开发。此外,详细讲解了Hyperf的路由配置,包括传统路由和注解路由的使用,并展示了依赖注入的两种方式。最后,文章提到了如何设置多端口监听和路由指向,帮助开发者更好地理解和应用Hyperf框架。
摘要由CSDN通过智能技术生成

安装

基于swoole安装:

composer create-project hyperf/hyperf-skeleton 

基于swow安装:

composer create-project hyperf/swow-skeleton 

启动:

cd hyperf-skeleton
php bin/hyperf.php start

编辑

由于每次更新代码都需要重启服务很麻烦。
Watcher是hyperf热更的一种办法

 composer require hyperf/watcher --dev   ##安装
 php bin/hyperf.php vendor:publish hyperf/watcher  ##生成配置文件
 config/autoload/watcher.php  ##配置文件所在目录

配置说明
启动Watcher

php bin/hyperf.php server:watch

路由

1.传统路由
直接在routes.php加就可以了

Router::addRoute(['GET', 'POST', 'HEAD'], '/', 'App\Controller\IndexController@index');

2.注解路由
首先我们需要下载phpstrom的IDE注解插件PHP Annotations,重启PHPstrom

AutoController方式:
<?php
namespace App\Controller;
use Hyperf\HttpServer\Annotation\AutoController;
 
/**
 * @AutoController(prefix="user")
 *  prefix参数会重定义类名  使Url自定义
 */
class IndexController extends AbstractController
{
    public function index()
    {
        $user = $this->request->input('user', 'Hyperf');
        $method = $this->request->getMethod();
 
        return [
            'method' => $method,
            'message' => "Hello {$user}.",
        ];
    }
}

如果没有加prefix参数的话 url是http://localhost:9501/index/index
如果定义了prefix参数 url就是 http://localhost:9501/user/index

Controller()方式
<?php
namespace App\Controller;
use Hyperf\HttpServer\Annotation\AutoController;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;
 
/**
 * @Controller(prefix="index")
 */
class IndexController extends AbstractController
{
    /**
     * @RequestMapping(path="index", methods={"get","post"})
     * #path规定了路由里对应该方法的名称,methods则规定了访问的方式
     * 注意参数要带引号而且必须是双引号
     */
    public function index()
    {
        $user = $this->request->input('user', 'Hyperf');
        $method = $this->request->getMethod();
 
        return [
            'method' => $method,
            'message' => "Hello {$user}.",
        ];
    }
}

@Controller()注解需要搭配 @RequestMapping() @GetMapping() @PutMapping() @PostMapping()等注解来一起使用

依赖注入

依赖注入有两种方法:
通过构造函数注入

    // 在构造函数声明参数的类型,Hyperf 会自动注入对应的对象或值
    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

另一种使用注解的方法

    /**
     * @Inject()
     * @var UserService
     */
    private $userService;

多端口监听

config/autoload/dependencies.php

<?php
return [
    'InnerHttp' => Hyperf\HttpServer\Server::class,
];

config/autoload/server.php

<?php
return [
    'servers' => [
        [
            'name' => 'http',
            'type' => Server::SERVER_HTTP,
            'host' => '0.0.0.0',
            'port' => 9501,
            'sock_type' => SWOOLE_SOCK_TCP,
            'callbacks' => [
                Event::ON_REQUEST => [Hyperf\HttpServer\Server::class, 'onRequest'],
            ],
        ],
        [
            'name' => 'innerHttp',
            'type' => Server::SERVER_HTTP,
            'host' => '0.0.0.0',
            'port' => 9502,
            'sock_type' => SWOOLE_SOCK_TCP,
            'callbacks' => [
                Event::ON_REQUEST => ['InnerHttp', 'onRequest'],
            ],
        ],
    ]
];

路由指向

<?php
//传统路由
Router::addServer('innerHttp', function () {
    Router::get('/', 'App\Controller\IndexController@index');
});

<?php
declare(strict_types=1);

namespace App\Controller;

use Hyperf\HttpServer\Annotation\AutoController;
//注解路由
/**
 * @AutoController(server="innerHttp")
 */
class IndexController
{
    public function index()
    {
        return 'Hello World.';
    }
}

rubyPHP高性能体现在以下几个方面: 1.页面缓存。页面缓存指之前加载过的页面以文件方式缓存在服务器中,在一段时间内再次加载相同页面时无需重新执行页面逻辑直接加载静态页面。rubyPHP的页面缓存是自动进行的,在config/tpl.php中可配置是否启用缓存以及缓存文件的有效期。当然这仅仅是全局设置,在调用视图时可重新指定是否启用缓存以及缓存有效期。 2.SQL缓存。sql缓存指之前执行过的查询sql语句以及他的结果缓存在内存中,在一段时间内用相同的sql语句执行查询操作时不经过数据库直接返回内存中数据。rubyPHP使用Redis以键值方式缓存sql语句以及他的对应结果。rubyPHP能够在php7上完美运行。(附:关于windows php7 redis 扩展的下载参照我的另一篇博客:http://blog.csdn.net/fanghailiang2016/article/details/51396649)。rubyPHP重写了mysql_query以及mongo_query方法,在执行查询sql查询语句时会优先加载未过期的缓存数据。与页面缓存类似,sql缓存的全局配置路径为config/redis.php,在具体执行sql语句前可重新执行是否使用缓存以及缓存有效期。 3.读写分离。读写分离是建立在主从同步基础上为了减轻服务器压力,将查询语句转移到从服务器上执行的解决方案。rubyPHP重写了mysql_query,mongo_query函数,除了对查询语句进行内存级缓存的优化,同时也将查询语句放到了从服务器上执行。mysql的主从配置文件路径为config/mysql.php
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值