Hyperf基础教程
前提说明
本教程适用于新手、老手,也适用于任何操作系统,包括Windows、linux、MacOS
介绍
Hyperf 是基于 Swoole 4.4+
实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM
的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换
与 可复用
的。
框架组件库除了常见的协程版的 MySQL 客户端
、Redis 客户端
,还为您准备了协程版的 Eloquent ORM
、WebSocket 服务端及客户端
、JSON RPC 服务端及客户端
、GRPC 服务端及客户端
、Zipkin/Jaeger (OpenTracing) 客户端
、Guzzle HTTP 客户端
、Elasticsearch 客户端
、Consul 客户端
、ETCD 客户端
、AMQP 组件
、Apollo 配置中心
、阿里云 ACM 应用配置管理
、ETCD 配置中心
、基于令牌桶算法的限流器
、通用连接池
、熔断器
、Swagger 文档生成
、Swoole Tracker
、视图引擎
、Snowflake 全局 ID 生成器
等组件,省去了自己实现对应协程版本的麻烦。
Hyperf 还提供了 基于 PSR-11 的依赖注入容器
、注解
、AOP 面向切面编程
、基于 PSR-15 的中间件
、自定义进程
、基于 PSR-14 的事件管理器
、Redis/RabbitMQ 消息队列
、自动模型缓存
、基于 PSR-16 的缓存
、Crontab 秒级定时任务
、国际化
、Validation 表单验证器
等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。
安装
先看下官方的文档说明
Hyperf 对系统环境有一些要求,仅可运行于 Linux 和 Mac 环境下,但由于 Docker 虚拟化技术的发展,在 Windows 下也可以通过 Docker for Windows 来作为运行环境,通常来说 Mac 环境下,我们更推荐本地环境部署,以避免 Docker 共享磁盘缓慢导致 Hyperf 启动速度慢的问题。 hyperf\hyperf-docker 项目内已经为您准备好了各种版本的 Dockerfile ,或直接基于已经构建好的 hyperf\hyperf 镜像来运行。 当您不想采用 Docker 来作为运行的环境基础时,您需要确保您的运行环境达到了以下的要求: PHP >= 7.2
Swoole PHP 扩展 >= 4.4,并关闭了 Short Name
OpenSSL PHP 扩展
JSON PHP 扩展
PDO PHP 扩展 (如需要使用到 MySQL 客户端)
Redis PHP 扩展 (如需要使用到 Redis 客户端)
Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)
可见,如果你打算再Windows上进行开发的话,那你可能会遇到一些困难,比如得装一个docker for windows或者装个虚拟机,由于有一部分win10系统是家庭版的,装docker for windows会遇到一些奇奇怪怪的问题,笔者建议不要采用这种方法
下面我将采用三种方法快速上手Hyperf
1、原生安装
适用范围:如果你是新手,你从来没有自己手动装过PHP环境,也没装过PHP相关扩展,你可以试试看这种方法,不过你得有耐心,因为你会遇到一系列奇奇怪怪的问题
难度指数:五星
2、使用docker安装
适用范围:如果你已经手动安装过PHP,配置过PHP环境以及相关扩展,想使用docker熟悉下,你可以试试看这种方式
难度指数:四星
3、docker-compose
适用范围:如果你有一定的docker操作经验,你可以使用这种一步到位的方法快速部署一个Hyperf项目
难度指数:三星
Tips:Linux或者MacOS用户可以跳过下面安装vmware虚拟机这一步
Windows用户安装 Vmware 和 Centos7(笔者用的是GUI版的Centos):
1、安装 Vmware 以及安装 Centos7,流程可以参考这位博主的文章,参考
2、配置一个共享文件夹,有什么作用呢,就是把你 Windows 上你的开发的项目映射到这台 Centos 虚拟机上,参考
3、配置虚拟机开机自动启动挂载脚本,目的是自动挂载上面的共享文件夹,不用自己手动操作,参考
快速开始
这里使用的是Hyperf的骨架项目,Github地址在这里
一、原生安装
原生安装的话,需要你的虚拟机要装有
- PHP(7.2以上版本)
- Swoole PHP 扩展 >= 4.4,并关闭了
Short Name
- OpenSSL PHP 扩展
- JSON PHP 扩展
- PDO PHP 扩展 (如需要使用到 MySQL 客户端)
- Redis PHP 扩展 (如需要使用到 Redis 客户端)
- Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)
- 安装 Composer
1. PHP安装
安装教程可以参考这里,如果遇到编译错误的问题,参考这里,配置PHP命令参考这里
PS:如果执行“php -v”版本变成5.X,那可能是你之前装过其他版本了,参考这里
2. Swoole扩展安装,OpenSSL、JSON、Redis等也同理,注意,装之前运行"php -m"查看,没有的话再安装
Swoole参考这里,JSON参考这里,OpenSSL参考这里,Redis参考这里
PS:其他扩展看你自己项目需要,GD库参考这里,zip参考这里,fileinfo参考这里
3. 安装composer
参考这里
OK,弄完上面这里,基本上环境就差不多了,如果遇到安装报错的话,应该是安装PHP那部分会出错的比较多,其他的很少出问题,下面使用Composer把骨架项目弄一下
在虚拟机的共享文件夹下面找个地方,运行下面命令,将会创建一个Hyperf的骨架项目,类似于一个啥都没有的Demo
# composer create-project hyperf/hyperf-skeleton
安装过程中可能需要一些时间,然后进入到项目里面,运行下面命令启动项目
# php bin/hyperf.php start
这样,项目就启动好了,如果没报错的话到这里就OK了,然后是测试,有两种方式,一种是浏览器打开:http://localhost:9501,另外一种是curl
# curl localhost:
//或者
# curl 0.0.0.0:
//或者
# curl 127.0.0.1:
Windows系统要怎么开发呢,还记得上面共享了一个文件夹吗,直接打开那个共享文件夹就会看到刚刚创建的项目,然后用你的编译器打开进行码码码就行了
由于Hyperf是持久化的 CLI 框架,当您修改完您的代码后,通过 CTRL + C
终止当前启动的进程实例,并重新执行 php bin/hyperf.php start
启动命令即可。
你也可以去Github上把这个项目的代码拉下来,运行compose install安装相应的扩展,再启动
二、使用docker安装
前提:既然要用docker安装,那你就得装上docker命令,参考docker官方的文档进行安装即可
一些概念说明:
1、vmware虚拟机:这个是windows用户在vmware上装的虚拟机,比如上面的centos
2、docker容器:这个是在centos上运行docker run命令启动的虚拟机
3、查看docker镜像命令:docker imgaes
4、查看所有docker容器命令:docker ps -a
方法一:参考官方的安装方式
# Windows用户要注意了,由于这个是在centos上运行的,下面的主机指的是centos # 下载并运行 hyperf/hyperf 镜像,并将镜像内的项目目录绑定到宿主机的 /tmp/skeleton 目录
docker run -v /tmp/skeleton:/hyperf-skeleton -p : -it --entrypoint /bin/sh hyperf/hyperf:7.2-alpine-cli # 镜像容器运行后,在容器内安装 Composer
wget https://github.com/composer/composer/releases/download/1.8.6/composer.phar
chmod u+x composer.phar
mv composer.phar /usr/local/bin/composer
# 将 Composer 镜像设置为阿里云镜像,加速国内下载速度
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer # 通过 Composer 安装 hyperf/hyperf-skeleton 项目
composer create-project hyperf/hyperf-skeleton # 进入安装好的 Hyperf 项目目录
cd hyperf-skeleton
# 启动 Hyperf
php bin/hyperf.php start
方法二:
其实上面的方式有点繁琐,看到骨架项目里面有一个Dockerfile文件,我们可以做一个镜像来处理
Dockerfile文件的内容,有没有很熟悉,其实就是上面那一块docker安装内容的整理,这里是把这些做成一个镜像
# Default Dockerfile
#
# @link https://www.hyperf.io
# @document https://doc.hyperf.io
# @contact group@hyperf.io
# @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE FROM hyperf/hyperf:7.2-alpine-v3.-cli
LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT" ##
# ---------- env settings ----------
##
# --build-arg timezone=Asia/Shanghai
ARG timezone ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
COMPOSER_VERSION=1.9. \
APP_ENV=prod # update
RUN set -ex \
&& apk update \
# install composer
&& cd /tmp \
&& wget https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \
&& chmod u+x composer.phar \
&& mv composer.phar /usr/local/bin/composer \
# show php version and extensions
&& php -v \
&& php -m \
# ---------- some config ----------
&& cd /etc/php7 \
# - config PHP
&& { \
echo "upload_max_filesize=100M"; \
echo "post_max_size=108M"; \
echo "memory_limit=1024M"; \
echo "date.timezone=${TIMEZONE}"; \
} | tee conf.d/-overrides.ini \
# - config timezone
&& ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
&& echo "${TIMEZONE}" > /etc/timezone \
# ---------- clear works ----------
&& rm -rf /var/cache/apk/* /tmp/* /usr/share/man \
&& echo -e "\033[42;37m Build Completed :).\033[0m\n" WORKDIR /opt/www # Composer Cache
# COPY ./composer.* /opt/www/
# RUN composer install --no-dev --no-scripts COPY . /opt/www
RUN composer install --no-dev -o EXPOSE 9501 ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
既然有Dockerfile,我们直接吧这个Dockerfile做成一个镜像吧
做镜像的命令是:docker build -t 镜像名:版本号 .
PS:.表示最后的Dockerfile文件的位置,可以为绝对路径
eg:docker build -t dev:1.0 .
做完镜像后
运行 docker images看看你创建的镜像
然后就可以启动了
启动的命令说明:docker run -v 主机卷:目标卷 -p 主机端口:目标端口 镜像名:版本号
eg:docker run -v /data/:/opt/www -p :9501 dev:1.0
查看docker日志,加上-f表示持续查看
docker logs -f 容器id 查看所有的容器
docker ps -a
记得你打包镜像的时候使用的镜像名跟版本号要跟后面启动的命令用的镜像名和版本号要保持一致
题外话,如果我想让这个docker容器跟另外一个docker容器,比如redis,要进行通信,要怎么做呢?参考这里
两个容器相互访问,使用--link eg:docker run -v /data/:/opt/www -p : --link xxx1:redis xxx2
三、docker-compose
前提:安装docker-compose,参考这里
安装完docker-compose后,在centos虚拟机任何地方创建一个docker-compose.yml文件
version: '2.0' services:
hyperf-test:
container_name: hyperf-test
hostname: hyperf-test
restart: always
image: dev:1.0
ports:
- :
expose:
-
volumes:
- /mnt/hgfs/hyperf-test/:/opt/www
说明:
1、"/mnt/hgfs/hyperf-test" 这个目录是我挂载我windows主机到centos虚拟机的地址,可以自由换成你自己的地址
2、hyperf-test里面的image使用的镜像是第二步我们用Dockerfile做的镜像
创建完成后呢,在这个docker-compose.yml文件的目录下,参考下面命令把容器启动、停止、重启、删除
// 启动容器
# docker-compose up
// 停止容器
# docker-compose stop
// 重启
# docker-compose restart
// 停止容器并删除
# docker-compose down
跟第二步一样,如果我想让两个容器建立通信,docker-compose.yml要怎么写呢
version: '2.0' services:
redis2:
image: redis
container_name: redis2
hostname: redis2
restart: always
command: --appendonly yes
ports:
- :
expose:
-
privileged: true
volumes:
- /data/redis_data:/data hyperf-test:
container_name: hyperf-test
hostname: hyperf-test
restart: always
image: dev:1.0
ports:
- :
external_links:
- redis2
links:
- redis2:redis
depends_on:
- redis2
expose:
-
volumes:
- /mnt/hgfs/hyperf-test/:/opt/www
说明:
1、把redis的配置也写上
2、使用link关联两个容器
3、上面其实启动了两个容器,一个是redis,另外一个是hyperf,并且将两者建立一个连接
其中,由于redis使用挂载的方法,不会因为重启丢失数据,所以得先在主机目录/data/redis_data建好文件并设置好权限,如果后面启动再次出现权限问题:
- 关闭SELinux,执行“setenforce 0”
- docker-compose加上“privileged: true”
- docker run 加上“--privileged=true”
docker-compose link使用方法参考这里
参考资料
Hyperf基础教程的更多相关文章
- matlab基础教程——根据Andrew Ng的machine learning整理
matlab基础教程--根据Andrew Ng的machine learning整理 基本运算 算数运算 逻辑运算 格式化输出 小数位全局修改 向量和矩阵运算 矩阵操作 申明一个矩阵或向量 快速建立一 ...
- <<Bootstrap基础教程>> 新书出手,有心栽花花不开,无心插柳柳成荫
并非闲的蛋疼,做技术也经常喜欢蛋疼,纠结于各种技术,各种需求变更,还有一个很苦恼的就是UI总是那么不尽人意.前不久自己开源了自己做了多年的仓储项目(开源地址:https://github.com/he ...
- Memcache教程 Memcache零基础教程
Memcache是什么 Memcache是danga.com的一个项目,来分担数据库的压力. 它可以应对任意多个连接,使用非阻塞的网络IO.由于它的工作机制是在内存中开辟一块空间,然后建立一个Hash ...
- Selenium IDE 基础教程
Selenium IDE 基础教程 1.下载安装 a 在火狐浏览其中搜索附件组件,查找 Selenium IDE b 下载安装,然后重启firefox 2.界面讲解 在菜单- ...
- html快速入门(基础教程+资源推荐)
1.html究竟是什么? 从字面上理解,html是超文本标记语言hyper text mark-up language的首字母缩写,指的是一种通用web页面描述语言,是用来描述我们打开浏览器就能看到的 ...
- 转发-UI基础教程 – 原生App切图的那些事儿
UI基础教程 – 原生App切图的那些事儿 转发:http://www.shejidaren.com/app-ui-cut-and-slice.html 移动APP切图是UI设计必须学会的一项技能,切 ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- oracle基础教程(8)oracle修改字符集
oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...
- 改写《python基础教程》中的一个例子
一.前言 初学python,看<python基础教程>,第20章实现了将文本转化成html的功能.由于本人之前有DIY一个markdown转html的算法,所以对这个例子有兴趣.可仔细一看 ...
随机推荐
- Mac通过homebrew 安装mysql
来源:http://timtang.me/blog/2011/12/07/mac-homebrew-mysql/ 使用MBP有一年了,开始想在工作中使用mac由于各种不习惯最终失败,导致自己使用了一年 ...
- php设计模式总结
#1 使用设计模式(如建造者.外观.原型和模板模式)更快速.更有效地创建对象 #2 使用数据访问对象和代理设计模式分离体系结构 #3 使用委托.工厂和单元素设计模式改善代码流和控制 #4 在不修改对象 ...
- 多转一ETH(ERC20代币汇集)
1.下载表格模板 2.导入小号地址 NO1.地址整理 NO2.地址导入 NO3.导入完成 3.查询地址余额1.下图是汇集ETH的操作图片 2.下图是汇集ERC20代币的操作图片 注 ...
- 家庭版记账本app开发之关于(数据库查找出数据)圆饼图的生成
这次完成的主要的怎样从数据库中调出数据.之后通过相关的数据,生成想要的圆饼图.以方便用户更加直观的看见关于账本的基本情况. 在圆饼图生成中用到了一些外部资源 具体的import如下: import c ...
- docker 相关操作
docker-compose down //关闭所有容器 docker-compose up //开启所有容器 docker-compose restart //重启所有容器 单独更新某个容器时用脚本 ...
- springboot https证书配置
如果公司有提供证书如: 拿到证书秘钥可直接在springboot 的配置文件中配置: server.ssl.key-store=classpath:cert.pfx server.ssl.key-st ...
- composer 巨慢的解决之道
扯点犊子 composer 默认的源是在国外的.默认情况下由于大家都心知肚明的一些原因,导致我们使用composer安装一些插件的时候巨慢无比.这个时候怎么办呢? 原理很简单就是更换我们国内的comp ...
- java 字符串截取 - 最后带上mysql字符串截取比较
Java中的substring()方法有两个方法的重载,一个带一个参数的,一个带两个参数的. 第一种写法: substring(n);//从索引是n的字符开始截取,条件(n>=0,n<字符 ...
- iOS获取剩余存储空间
//ios获取剩余存储空间 -(void)usedSpaceAndfreeSpace{ NSString* path = [NSSearchPathForDirectoriesInDomains(NS ...
- SwiftUI - 一步一步教你使用UIViewRepresentable封装网络加载视图(UIActivityIndicatorView)
概述 网络加载视图,在一个联网的APP上可以讲得上是必须要的组件,在SwiftUI中它并没有提供如 UIKit 中的UIActivityIndicatorView直接提供给我们调用,但是我们可以通过 ...