官方地址:https://hyperf.io/
Hyperf 是一个高性能、高灵活性的渐进式 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。
PS C:\Windows\system32> docker run -d --name hyperf -v D:/workspace/skeleton:/hyperf-skeleton -p 9501:9501 -it --privileged -u root --entrypoint /bin/sh hyperf/hyperf:8.1-alpine-v3.18-swoole
-d 将以分离模式运行此容器,以便它在后台运行。
--name 将名称“hyperf ”分配给您的容器实例。
-p会将 hyperf 容器端口 9501绑定到主机上的相同端口。
-v选项将容器卷 (/hyperf-skeleton)内的数据文件夹绑定到本地 宿主机共享目录 (D:/workspace/skeleton )。
出现这个就代表创建成功了
PS C:\Windows\system32> docker exec -it hyperf /bin/bash 5b50ce9c9e68:/#
5b50ce9c9e68:/# composer config -g repo.packagist composer https://mirrors.aliyun.com/composer 5b50ce9c9e68:/# ls bin home lib opt run sys var dev hyperf-skeleton media proc sbin tmp etc init.php mnt root srv usr
5b50ce9c9e68:/# composer create-project hyperf/hyperf-skeleton Creating a "hyperf/hyperf-skeleton" project at "./hyperf-skeleton" Installing hyperf/hyperf-skeleton (v3.1.1) - Downloading hyperf/hyperf-skeleton (v3.1.1) - Installing hyperf/hyperf-skeleton (v3.1.1): Extracting archive Created project in //hyperf-skeleton > @php -r "file_exists('.env') || copy('.env.example', '.env');" > Installer\Script::install ....
如:我的是D:/workspace/skeleton
1、目录结构
2、配置文件结构
那么是如何读取配置呢?
config/config.php中
<?php declare(strict_types=1); use Hyperf\Contract\StdoutLoggerInterface; use Psr\Log\LogLevel; return [ 'app_name' => env('APP_NAME', 'skeleton'), 'app' => [ 'name_space' => env('NAME_SPACE', 'App\Controller') ], ]; // 读取配置的其中一种方式为:config('app.name_space')
如果上面的文件绝对路径为:config/autoload/client.php,那么获取的代码为:config('client.app.name_space')
3、app的目录结构
5b50ce9c9e68:/# cd hyperf-skeleton/ 5b50ce9c9e68:/hyperf-skeleton# ls Dockerfile app composer.lock docker-compose.yml runtime LICENSE bin config phpstan.neon test README.md composer.json deploy.test.yml phpunit.xml vendor 5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php start [DEBUG] [command] Commands registered by Hyperf\Command\Listener\RegisterCommandListener [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Command\Listener\RegisterCommandListener listener. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\Config\Listener\RegisterPropertyHandlerListener listener. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\DbConnection\Listener\RegisterConnectionResolverListener listener. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ExceptionHandlerListener listener. [DEBUG] Event Hyperf\Framework\Event\BootApplication handled by Hyperf\ExceptionHandler\Listener\ErrorExceptionHandler listener. [DEBUG] Event Hyperf\Framework\Event\BeforeMainServerStart handled by Hyperf\Process\Listener\BootProcessListener listener. [DEBUG] Event Hyperf\Framework\Event\OnManagerStart handled by Hyperf\Server\Listener\InitProcessTitleListener listener. [DEBUG] Event Hyperf\Framework\Event\OnStart handled by Hyperf\Server\Listener\InitProcessTitleListener listener. [INFO] Worker#10 started. [INFO] Worker#7 started. [INFO] Worker#4 started. [INFO] Worker#3 started. ...
由于 Hyperf 是持久化的 CLI 框架,当您修改完您的代码后, 通过 CTRL + C 终止当前启动的进程实例,并重新执行 php bin/hyperf.php start 启动命令即可。
Router::addRoute(['GET', 'POST', 'HEAD'], '/test', 'App\Controller\IndexController@test');
PS C:\Windows\system32> docker exec -it hyperf /bin/bash 5b50ce9c9e68:/# cd hyperf-skeleton/ 5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php start
4.在浏览器输入http://127.0.0.1:9501/test
到这里一个简单的使用Hyperf过程就完成了,更详情的内容请查看https://hyperf.wiki/3.0/ 开发文档。
用 php bin/hyperf.php start 启动命令,使用过程中一不小心把终端给关闭,再重新去启动时就会显示以下问题:
问题原因:就由于上次已经启动过了,导致端口被占用了
解决办法:
1.先查看端口对应的进程
5b50ce9c9e68:/hyperf-skeleton# netstat -tulp|grep 9501 tcp 0 0 0.0.0.0:9501 0.0.0.0:* LISTEN 466/skeleton.Master
2.使用kill 杀掉进程ID
5b50ce9c9e68:/hyperf-skeleton# kill -9 466
在运行的时候可以在后边加一个**&**号,这样就会以守护进程的方式运行,这样就算不小心关闭终端也没事了。
5b50ce9c9e68:/hyperf-skeleton# composer require hyperf/watcher --dev
5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php vendor:publish hyperf/watcher
5b50ce9c9e68:/hyperf-skeleton# php bin/hyperf.php server:watch
在你修改代码后间每到隔时间就会扫描文件,然后就会自动重载服务。
##获取容器地址
PS C:\Windows\system32> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b50ce9c9e68 hyperf/hyperf:8.1-alpine-v3.18-swoole "/bin/sh" 9 minutes ago Up 9 minutes 0.0.0.0:9501->9501/tcp hyperf PS C:\Windows\system32> docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) /hyperf - 172.17.0.2 PS C:\Windows\system32>
问题1:SQLSTATE[HY000][1130] Host ‘host.docker.internal‘ is not allowed to connect to this MySQL server
产生原因:
由于搭建了docker环境,把项目放到docker环境内部了,和主机mysql隔离了,所以当docker项目访问mysql时,访问性质是:局域网访问
解决方案:
mysql局域网访问,需要改变其自带库中user表的字段User为root的host字段值,流程如下:
一 、Navicat操作
二 、 刷新mysql权限:
对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。
附:
更改镜像存储位置、替换国内源
win10环境下使用Docker-Toolbox 搭建 Hyperf框架过程
windows下的docker容器内的hyperf框架连接宿主机的mysql数据库
Hyperf 3 快速使用 - 依赖注入注解 Service 层使用
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn