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 协议》,转载必须注明作者和本文链接
牛哇牛啊,厉害
我悟了 铁子
之前研究了一点 Hyperf ,搞得一个 deme 跑了一下, 照着文档敲了敲( 没敲很多, 但是 Hyperf 的通过注解定义路由还是帅了我一脸 )。 但还是不太懂啥到底什么是 GRPC 。以及用它来做什么。