需要如下软件支持:
- php-grpc扩展
- php-protobuf扩展
- protoc命令行工具
- grpc_php_plugin模板生成工具
- swoole开启openssl,http2
一、安装
1. 编译安装 grpc 扩展 (注意 grpc 版本对应的 protobuf 版本号)
2. 下载解压缩
wget http://pecl.php.net/get/grpc-1.30.0.tgz
tar xvf grpc-1.30.0.tgz
cd grpc-1.30.0
编译安装
/usr/local/php/72/bin/phpize
./configure --with-php-config=/usr/local/php/72/bin/php-config
make && make install
配置php.ini
vim /usr/local/php/etc/php.ini
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/grpc.so
重启php服务
/etc/init.d/php-fpm reload
2. 编译安装 protobuf 扩展
下载解压缩protobuf
wget http://pecl.php.net/get/protobuf-3.12.2.tgz
tar xvf protobuf-3.12.2.tgz
cd protobuf-3.12.2
编译安装
/usr/local/php/72/bin/phpize
./configure --with-php-config=/usr/local/php/72/bin/php-config
make && make install
配置php.ini
vim /usr/local/php/etc/php.ini
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/protobuf.so
重启php服务
/etc/init.d/php-fpm reload
3. 重新编译安装swoole
./configure --enable-openssl --with-openssl-dir=/usr/local/opt/openssl
--enable-http2 --with-php-config=/usr/local/php/bin/php-config
4. grpc_php_plugin模板生成工具(用源码安装会有问题,直接搜编译好的文件)
5. 最后一步,测试
mkdir grpc目录
创建grpc.proto文件
syntax = "proto3";
package grpc;
service Hi {
rpc sayHello (HiUser) returns (HiReply) {
}
}
message HiUser {
string name = 1;
int32 sex = 2;
}
message HiReply {
string message = 1;
HiUser user = 2;
}
执行生成命令:
protoc -I=. grpc.proto --proto_path=grpc/ --php_out=grpc/ --grpc_out=grpc/
--plugin=protoc-gen-grpc=/usr/bin/grpc_php_plugin
最后,tree grpc,看效果,成功啦!
grpc
├── GPBMetadata
│ └── Grpc.php
└── Grpc
├── HiClient.php
├── HiReply.php
└── HiUser.php
二、gRPC压测工具
下载安装:ghz工具包:https://github.com/bojand/ghz/releases
压测命令:
ghz -n 100 -c 10 --insecure --proto ./api.proto --call api.HelloWorld.Say
-d '[{"Message":"hello"},{"Message":"hi"}]' 127.0.0.1:9092
看效果:
Summary:
Count: 10000
Total: 1.80 s
Slowest: 39.19 ms
Fastest: 0.52 ms
Average: 11.16 ms
Requests/sec: 5545.06
Response time histogram:
0.515 [1] |
4.383 [610] |∎∎∎∎∎∎∎
8.250 [1881] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
12.118 [3328] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
15.985 [2895] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
19.853 [1145] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎
23.720 [93] |∎
27.588 [8] |
31.455 [17] |
35.323 [14] |
39.191 [8] |
Latency distribution:
10 % in 5.38 ms
25 % in 8.27 ms
50 % in 11.23 ms
75 % in 13.87 ms
90 % in 16.52 ms
95 % in 17.75 ms
99 % in 20.77 ms
Status code distribution:
[OK] 10000 responses