前言
通过前面两篇文章,我们恶补了一下网络的基础知识和RPC的介绍,接下来我们就开始学习PHP版本的RPC框架,swoole.
swoole介绍
介绍
Swoole是一个C++编写的基于异步事件驱动和协程的并行网络通信引擎,为PHP提供高性能网络编程支持
swoole能提供哪些功能
http服务 ,编写一个简单的web server。
TCP/UDP服务 ,编写一个消息接受处理系统。
异步,可以异步的处理请求。
并发 ,可以并发的处理同一个业务逻辑。
socket,socket通讯处理技术。
毫秒级别定时器,可以在php中使用定时器了。
协程,相比线程更稳定和好用。
基于swoole开发的框架
Swoft:
首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的 使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、 API、中间件、基础服务等等。
EasySwoole:
是一款基于Swoole Server 开发的常驻内存型PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失。
EasySwoole 高度封装了Swoole Server 而依旧维持Swoole Server 原有特性,支持 同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。
SwooleDistributed:
老牌Swoole框架拥有最完善的开发工具以及最强大的功能,首创SDHelper开发者工具包和开发者调试命令集,可以进行单元测试,捕获客户端流量分析,可视化的进行远程断点联调,还具备代码覆盖率检测的功能 (swoole与xdebug扩展不兼容,SDHelper无需xdebug扩展),并且内置组件极其丰富(类MQTT强悍的订阅发布/Actor模型/内存高速缓存/事件派发/进程管理/定时任务/AMQP任务调度/后台监控/集群/微服务/RPC/异 步连接池/自定义命令等等),开发者可以直接使用加快开发进度。几乎所有的功能都支持集群化,单机切换到集群无需对代码做任何的修改。如果业务开发比较复杂比如(游戏开发)那么SD框架将是你的不二之选
swoole的应用场景
如果你的业务中,有用到以上等特性,你又在用使用php,那么完全可以用swoole来完成了,再具体点的场景如下:
1. 互联网
2. 移动通信
3. 企业软件
4. 云计算
5. 网络游戏
6. 物联网(IOT)
7. 车联网
8. 智能家居等领域
可以配合与传统型框架比如laravel,thinkphp6.0进行加速(注意这些框架是ioc容器为核心的)
本质就在于c/s 应用
swoole安装
终于到了激动人心的环节啦,安装我们的swoole
环境搭建
学习环境 : centos7+php7.4+Nginx1.20+mysql5.7+swoole4.42
其中:php7.4+Nginx1.20+mysql5.7通过宝塔的集成环境安装的
swoole的安装
1.下载地址 :
swoole的Github地址:https://github.com/swoole/swoole-src
swoole的gitee地址:https://gitee.com/swoole/swoole/tags
2.下载完成后,打开虚拟机,将压缩包上传上去
- 解压缩:tar -xvf swoole-src-4.4.12.tar.gz
4.进入解压缩好的swoole文件夹: cd swoole-src-4.4.12
5.用phpize编译共享PECL扩展库:phpize
6.编译完成后,用./configure进行配置: ./configure
注 !! 在执行 ./configure 的时候容易会出现如下错误:configure: error: Cannot find PHP-config. Please use --with-php-config=PATH
问题的意思就是因为PHP的配置文件没有找到,需要额外的指定如下
./configure --with-php-config=/usr/local/php/bin/php-config
7.你可以通过下面的命令既可以查找到php-config的文件地址 : find / -name php-config
/www/server/php/73/src/scripts/php-config
/www/server/php/73/bin/php-config
8.所以我的安装执行是: ./configure --with-php-config=/www/server/php/73/bin/php-config
9.make编译安装: make && sudo make install
10.最后执行配置好php.ini在里面添加swoole的扩展即可
[root@localhost swoole-src-4.4.12]# find / -name php.ini
/www/server/php/73/etc/php.ini
[root@localhost swoole-src-4.4.12]# vi /www/server/php/73/etc/php.ini
extension=swoole.so
11.然后通过php -m检测,最后就是重启即可
[root@localhost swoole-src-4.4.12]# /etc/init.d/php-fpm-73
restart Reload service php-fpm done
12.关闭防火墙(仅限虚拟机): systemctl stop firewalld
swoole初尝试
服务端代码
<?php
use Swoole\Server;
$server = new Server('0.0.0.0', 9500);
$server->on('start', function ($server) {
echo "TCP Server is started at tcp:/0.0.0.0:9500\n";
});
$server->on('connect', function ($server, $fd){
echo "connection open: {$fd}\n";
});
$server->on('receive', function ($server, $fd, $reactor_id, $data) {
$server->send($fd, "Swoole: {$data}");
});
$server->on('close', function ($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
客户端代码
<?php
use Swoole\Client;
$client = new Client(SWOOLE_SOCK_TCP);
//连接到服务器
if (!$client->connect('127.0.0.1', 9500, 0.5))
{
die("connect failed.");
}
//向服务器发送数据
if (!$client->send("hello world"))
{
die("send failed.");
}
//从服务器接收数据
$data = $client->recv();
if (!$data)
{
die("recv failed.");
}
echo $data;
//关闭连接
$client->close();