PHP搞微服务杂谈(一)关于高效的开发环境搭建

本文将以本人使用windows/linux做开发环境为例,mac的可以绕开。其实这个系列文章是对上一个系列文章(带你轻松使用Hyperf玩转Grpc)做补充探讨,因此内容依旧围绕 hyperf(swoole框架)+ grpc 搭建微服务。我们团队使用的是go+php的并线开发,若是想了解go如何通过grpc与php互相调用的也可关注这两个系列文章。大牛请绕行哈哈哈。

需要什么?

php-cli、php基本的扩展、composer

swoole扩展

protoc(protobuf工具)、grpc_php_plugin 插件(用来生成php代码)

tips:若是旧项目使用 php-fpm 那就还需要安装 php-fpm 、grpc扩展、protobuf 扩展才能正常使用grpc客户端。

使用Docker直接了当

人生苦短,我选 docker

使用 docker 确实是比较方便,只要设计编译一次镜像放哪运行都一样

tips:可以选择我编译好的开发环境镜像,如下:

docker pull tangshaoxu/php-swoole-dev8:v2.0
docker run –rm -it -p 9501:9501 -v ./code:/app tangshaoxu/php-swoole-dev8:v2.0 /bin/sh

我上一系列文章的开篇使用的也是docker编排做开发环境(博客:带你轻松使用Hyperf玩转Grpc(一)环境搭建

好处:简单方便

坏处:性能较低,程序启动慢,当然脚本执行的也慢,并且无法使用fswatch热更新(有些同学还是需要热更新)

因此 windows 开发环境的同学就需要借助到Linux(WSL)了

使用WSL/Linux

关于WSL,以及如何安装问题这边就不做介绍,有需要的同学自行google,并且最好使用 WSL 2 版本

这边以 WSL 使用 Ubuntu 为例

1、安装php + swoole

# 安装php所需的apt库

apt update
apt install ca-certificates apt-transport-https software-properties-common wget gnupg2 unzip cmake g++ -y
sudo add-apt-repository ppa:ondrej/php
apt update

# 安装指定 php8.1版本 以及swoole扩展
apt install php8.1 php8.1-bcmath php8.1-curl php8.1-dom php8.1-mbstring php8.1-redis php8.1-mysql php8.1-gd php8.1-zip php8.1-xml php8.1-swoole -y

# 写入配置
echo "memory_limit=1G" > /etc/php/8.1/cli/conf.d/00_default.ini
echo "opcache.enable_cli = 'On'" >> /etc/php/8.1/cli/conf.d/*-opcache.ini
echo "swoole.use_shortname = 'Off'" >> /etc/php/8.1/cli/conf.d/*-swoole.ini

tips:这边swoole 就直接以最简单的方式装上了,大家也可以照着官网文档自行编译安装最新版本

2、安装composer

# 下载
wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/2.5.5/composer.phar
# 授权
chmod u+x /usr/local/bin/composer

3、安装protoc

tips:如果对protobuf 陌生的同学 可以先google了解一下

# 下载
curl -sSL "https://github.com/protocolbuffers/protobuf/releases/download/v3.18.1/protoc-3.18.1-linux-x86_64.zip" -o protoc.zip
# 建临时目录,解压
mkdir -p protoc
unzip protoc.zip -d ./protoc
# 安装
mv ./protoc/bin/protoc /usr/bin/
mv ./protoc/include/google /usr/include

4、安装grpc_php_plugin插件

tips:这一步至关重要,也是相对麻烦的一个步骤

# 下载
git clone -b "v1.46.3" "https://github.com/grpc/grpc"
cd grpc
git submodule update --init
# 编译
mkdir -p cmake/build
cd cmake/build
cmake ../..
make protoc grpc_php_plugin
# 复制
cp grpc_php_plugin /usr/local/lib/

到此,环境已经准备完毕。可以在电脑盘中安装hyperf,并尝试运行

当执行运行命令大家会发现,启动慢依旧没改变。再试试使用fswatch热更新 也是不行。

启动慢 ?无法使用fswatch热更新 ?

是的,这是由于WSL2在跨OS文件系统方面性能低导致的。

tips:图片来源 learn.microsoft.com/zh-cn/windows/...

而代码文件存放在 windows文件系统下,linux子系统当然无法使用fswatch对文件进行监控。因此也就无法使用fswatch做热更新。

客户端 -> linux(wsl)-> 代码文件 (windows)

解决方法

解决方法朴实无华,就是把代码放 linux(wsl)。在windows 也照常能用文件资源管理器访问,甚至可以使用 PHPStorm、vscode等工具打开代码。甚至使用 新版PHPStorm打开项目,使用命令行工具还自动切换到wsl,非常的好用。

客户端 -> 代码文件(wsl)

再启动试试,将发现启动变得飞快,由原来的十几秒 提升到 2秒左右。

甚至可以安装fswatch,用起来热更新。

本作品采用《CC 协议》,转载必须注明作者和本文链接
from crayxn github.com/crayxn
本帖由系统于 10个月前 自动加精
讨论数量: 7

牛哇牛啊,厉害

1年前 评论

我悟了 铁子

11个月前 评论

之前研究了一点 Hyperf ,搞得一个 deme 跑了一下, 照着文档敲了敲( 没敲很多, 但是 Hyperf 的通过注解定义路由还是帅了我一脸 )。 但还是不太懂啥到底什么是 GRPC 。以及用它来做什么。

10个月前 评论
Crayxn (楼主) 10个月前
徵羽宫 (作者) 10个月前
Crayxn (楼主) 10个月前
徵羽宫 (作者) 10个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!