Hyperf 初体验

臭大佬 2020-07-04 13:15:50 2453
php 
简介 Hyperf 初体验

前言

swoole框架这些年挺火的,这不,搞了个外包是Hyperf框架的,之前只接触过easyswoole,还没撸过Hyperf。感谢外包,让我学习了一波,哈哈哈。

安装

环境

  • ubuntu
  • php7.2
  • swoole4.X

composer 安装

composer create-project hyperf/hyperf-skeleton


这些是什么,官网也没说,那就都默认吧,但是安装时出现如下错误:

proc_open(): fork failed - Cannot allocate memory

解决方法:

提示“提示内存不足”,我们可以通过创建swap分区解决这个问题。

查看内存空间
free -m

操作

执行如下三条命名:

dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
mkswap /var/swap.1
swapon /var/swap.1

完成后在运行composer安装框架

运行

准备就绪,可以开始跑了,在项目根目录下运行如下命令

sudo php bin/hyperf.php start


在运行过程中,如果出现如下错误:

failed to listen server port[0.0.0.0:9501], Error: Address already in use[98]

框架默认启动9501端口,这是端口被占用的结果。
第一种解决方案就是修改运行端口,修改config/server.php文件中的如下截图圈出部分。

第二种就是杀死端口,重新启动,步骤如下:
找到PID

sudo lsof -i:9501

杀掉进程

sudo kill -9 30387

查看端口

sudo netstat  -anp  |  grep 9501

已经不在了,启动

sudo php bin/hyperf.php start

supervisor管理

supervisor在另一篇文章Supervisor安装及使用有介绍过,具体操作请移步。

安装

sudo apt-get install supervisor

配置

查看配置所在位置

sudo whereis supervisor

进入 /etc/supervisor 目录,创建一个配置文件

sudo vim ./conf.d/hyperf.conf

内容如下(xxx部分改成项目根目录):

# 新建一个应用并设置一个名称,这里设置为 hyperf

[program:hyperf]

# 设置命令在指定的目录内执行

directory=/xxx

# 这里为您要管理的项目的启动命令

command=php bin/hyperf.php start

# 以哪个用户来运行该进程

user=root

# supervisor 启动时自动该应用

autostart=true

# 进程退出后自动重启进程

autorestart=true

# 进程持续运行多久才认为是启动成功

startsecs=1

# 重试次数

startretries=3

# stderr 日志输出位置,标准错误日志

stderr_logfile=/xxx/runtime/stderr.log

# stdout 日志输出位置,标准输出日志

stdout_logfile=/xxx/runtime/stdout.log

启动

sudo supervisord -c /etc/supervisor/supervisord.conf

如果出现如下错误:

这是python版本引起的,编辑/usr/bin/supervisord和/usr/bin/supervisorctl将#!/usr/bin/python修改为#!/usr/bin/python2即可。

查看是否已启动

ps -ef|grep supervisord

使用 supervisorctl 管理 hyperf

# 启动 hyperf 应用

supervisorctl start hyperf

# 重启 hyperf 应用

supervisorctl restart hyperf

# 停止 hyperf 应用

supervisorctl stop hyperf 

# 查看所有被管理项目运行状态

supervisorctl status

# 重新加载配置文件

supervisorctl update

# 重新启动所有程序

supervisorctl reload

测试

启用
sudo supervisorctl start hyperf


关闭
sudo supervisorctl stop hyperf