- 初识网络通信
- 什么是网络通信
- swoole介绍
- swoole 简介
- swoole提供的功能库
- swoole的框架
- Swoft
- EasySwoole
- SwooleDistributed
- 环境搭建
- swoole自定义安装
- 配置到php.ini
- swoole初体验
- TCP服务
- server端
- 客户端
- TCP服务
初识网络通信
什么是网络通信
我们常见访问某个网站,如访问百度,腾讯,新浪等网站,他是通过http服务协议进行访问,这种就叫做网络通信,如下简易示意图

swoole就是这个网络通信的佼佼者,接下来我们来学习swoole
swoole介绍
swoole 简介
swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。
Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
swoole提供的功能库
swoole提供了哪些功能给我们用,以为我们用到哪些服务时,可以用swoole来帮我们实现。
http服务 ,编写一个简单的web server。
TCP/UDP服务 ,编写一个消息接受处理系统。
异步,可以异步的处理请求。
并发 ,可以并发的处理同一个业务逻辑。
socket,socket通讯处理技术。
毫秒级别定时器,可以在php中使用定时器了。
协程,相比线程更稳定和好用。
如果你的业务中,有用到以上等特性,你又在用使用php,那么完全可以用swoole来完成了,再具体点的场景如下:
1、互联网
2、移动通信
3、企业软件
4、云计算
5、网络游戏
5、物联网(IOT)
6、车联网
7、智能家居等领域
swoole的框架
Swoft
首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,
全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、
强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。
EasySwoole
EasySwoole 是一款基于Swoole Server 开发的常驻内存型PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失。
EasySwoole 高度封装了Swoole Server 而依旧维持Swoole Server 原有特性,支持同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用服务。
SwooleDistributed
SwooleDistributed 老牌Swoole框架拥有最完善的开发工具以及最强大的功能,首创SDHelper开发者工具包和开发者调试命令集,可以进行单元测试,
捕获客户端流量分析,可视化的进行远程断点联调,还具备代码覆盖率检测的功能(swoole与xdebug扩展不兼容,SDHelper无需xdebug扩展),
并且内置组件极其丰富(类MQTT强悍的订阅发布/Actor模型/内存高速缓存/事件派发/进程管理/定时任务/AMQP任务调度/后台监控/集群/微服务/RPC/异步连接池/自定义命令等等),
开发者可以直接使用加快开发进度。
几乎所有的功能都支持集群化,单机切换到集群无需对代码做任何的修改。
如果业务开发比较复杂比如(游戏开发)那么SD框架将是你的不二之选
环境搭建
环境:centos7+nginx1.18+php7.4+mysql5.7+swoole4.48
swoole自定义安装
[root@localhost /]# cd /root
[root@localhost root]# tar -xvf swoole-src-4.4.12.tar.gz
[root@localhost root]# cd swoole-src-4.4.12
[root@localhost swoole-src-4.4.12]# phpize
[root@localhost swoole-src-4.4.12]# ./configure
[root@localhost swoole-src-4.4.12]# make
[root@localhost swoole-src-4.4.12]# sudo make install
注 !! 在执行 ./configure 的时候容易会出现如下错误
configure: error: Cannot find PHP-config. Please use --with-php-config=PATH
问题的意思就是因为PHP的配置文件没有找到,需要额外的指定如下
[root@localhost swoole-src-4.4.12]# ./configure --with-php-config=/usr/local/php/bin/php-config
你可以通过下面的命令既可以查找到php-config的文件地址
[root@localhost swoole-src-4.4.12]# find / -name php-config
/www/server/php/73/src/scripts/php-config
/www/server/php/73/bin/php-config
所以我的安装执行是
[root@localhost swoole-src-4.4.12]# ./configure --with-php-config=/www/server/php/73/bin/php-config
[root@localhost swoole-src-4.4.12]# make
[root@localhost swoole-src-4.4.12]# sudo make install
配置到php.ini
[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
然后通过php -m检测
最后就是重启即可
[root@localhost swoole-src-4.4.12]# /etc/init.d/php-fpm-73 restart
Reload service php-fpm done
swoole初体验
TCP服务
server端
点击查看代码
use Swoole\Server;
/*$server = new Server("0.0.0.0",9500);
$server->set([
//设置进程
'work_num' => 2
]);
//监听事件
$server->on('connect',function (){
echo "有新的连接进来".PHP_EOL;
});
$server->on('message',function (){
echo "有新的消息".PHP_EOL;
});
//关闭
$server->on('close',function (){
echo "服务器关闭啦!".PHP_EOL;
});
//服务器开启
$server->start();*/
$server = new Server('0.0.0.0', 9503);
$server->on('start', function ($server) {
echo "TCP Server is started at tcp://127.0.0.1:9503\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();
客户端
点击查看代码
use Swoole\Client;
//实例化
$client = new Client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_SYNC);
//连接
$client->connect('127.0.0.1',9503);
//fd+id = swoole才能识别当前客户端身份
//发送消息
$client->send("我是客户端");
//客户端关闭
$client->close();
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv10841