学习swoole我们要首先了解下网络通信架构
B/S结构 (Browser/Server):又称浏览器/服务器模式。
这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。
C/S结构(Client/Server,客户/服务器模式)
客户端需要安装专用的客户端软件。通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。客户端进行用户界面/事物处理,服务器进行数据处理。
两者比较
C/S架构 可以保持长连接,长时间未发送持续链接包将断开链接。
B/S 短链接 一次请求只返回一次结果,当用户访问浏览器,只会响应一次不可多次交互
b/s架构如果想实现客户端与服务端的双向通信,一般可以通过轮询或长轮询方式,但这两种方式相当消耗资源,如果访问量较高,也会对服务器造成一定的压力。此时就体现websocket的优势。
swoole与workman比较
有人说如果想实现双向通信workerman也可以啊,为何要使用swoole。一个东西得出现必然有出现的道理,相互比较择优选择才会更好。
swoole是PHP的一个扩展,由C/C++语言开发,对于内存管理,数据结构,通信协议等要比PHP开发的workerman效率高很多。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
从本质来说,swoole属于C/S架构网络编程。
说了那么多让我们来看看swoole能做什么。
应用场景
聊天室开发、游戏、物联网等场景中都有应用。
下载swoole编译安装
环境准备 centos7
宝塔7.0
PHP 7.3
swoole :4.4.12
1.安装
swoole 是php 的扩展,支持在Linux 下,在window 下需要 安装cgywin,Cygwin是一个在windows平台上运行的类UNIX模拟环境
window安装参考https://www.cnblogs.com/chenjunwu/p/10953652.html
这里我们只演示在linux下的安装
https://github.com/swoole/swoole-src/releases下载对应版本
这里我们下载4.4.12这个版本
然后上传到服务器 对应目录 /www/server/swoole/
tar -zxvf swoole-src-4.4.12.tar.gz
cd /swoole-src-4.4.14
phpize
find / -name php-config // 不要一对一复制,请根据实际情况查看
./configure --with-php-config=/www/server/php/73/bin/php-config
make
make install
编译安装完成后找到php.ini 文件
find / -name php.ini //根据实际情况找到php.ini文件
vi /www/server/php/73/etc/php.ini
添加 extension=swoole.so
:wq 保存并退出
然后 /etc/init.d/php-fpm-73 restart
重启php-fpm
php --ri swoole | grep Vers 查看swoole版本
初体验
// 1.创建swoole 默认创建一个同步阻塞tcp服务
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new SwooleServer("127.0.0.1", 9501);
//监听连接进入事件
$serv->on('Connect', function ($serv, $fd) {
echo "Client: Connect.n";
});
// 2.注册事件
//监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "Server: ".$data);
});
//监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {
echo "Client: Close.n";
});
$serv->on('Start',function($serv){
echo '启动swoole'
})
// 3.启动服务器
$serv->start(); //阻塞与非阻塞
浏览器如何解析域名
1.域名解析:浏览器解析域名对应的IP地址;
//DNS Domain Name System 域名系统 将域名映射为IP地址的过程就称为“域名解析”。DNS就是进行域名解析的服务器
2.发起TCP的3次握手 :TCP 传输控制协议
//1.拿到IP地址后,浏览器第一次发起连接请求(试探),进入等待回复状态,(没有携带数据)
//2.服务器端接收到请求之后,如果同意连接,向客户端发送确认;
//3.客户端收到确认后需再发一次请求,此时携带要发送给Server的数据,服务器端收到客户端确认后,此时TCP连接,可以发起Http请求。
3.建立TCP连接后发起http请求
4.服务器响应http请求,浏览器得到html代码
5.浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
6.浏览器对页面进行渲染呈现给用户
更好的学习了解swoole 我们可以下载这个组件
下载swoole-ide-helper