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
本帖由系统于 1年前 自动加精
讨论数量: 7

牛哇牛啊,厉害

1年前 评论

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

1年前 评论
Crayxn (楼主) 1年前
徵羽宫 (作者) 1年前
Crayxn (楼主) 1年前
徵羽宫 (作者) 1年前