前言
想必使用PHP作为开发语言的童鞋应该都听说过swoole,大致都知道swoole是什么.
Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。Swoole 可以广泛应用于互联网、移动通信、云计算、 网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。总的来说Swoole是PHP 协程框架,能够.swoole是由纯 C 语言编写,完美支持PHP语言。可使用Swoole搭建了一个异步服务器,提供异步响应,推送,定时任务等一系列工作。解决PHP语言本身在fpm的场景下每个请求都需要重新加载,对资源消耗过多的问题.
由于swoole仅支持 Linux
(2.3.32 以上内核)、FreeBSD
、MacOS
三种操作系统,以前对windows系统的支持不太好.想要在windows使用swoole,需要安装linux虚拟机或者安装docker,由于docker本身对windows系统的支持也不太友好,所以在windows上的体验极其糟糕.不过我在GitHub上看到最新的swoole已经可以支持windows系统,对于windows服务器的用户来说无疑是个好消息,下面就在windows系统体验一下
安装准备
环境:
- windows7 64位(注:仅支持64位的系统)
- cygwin64
- 下载地址
https://github.com/swoole/swoole-src/releases
swoole-cli是免安装的,可直接使用,无需安装任何php
相关的软件包,直接下载swoole-cli-cygwin64
的可执行程序zip
压缩包,然后解压到任意一个目录即可
配置环境变量
解压之后就是配置环境变量
解压之后目录结构如下:
将解压后的文件夹下的bin目录路径配置到系统的Path环境变量中。我的路径是G:\swoole-cli-v4.8.11-cygwin64\bin,你需要按照你本机解压后的具体位置配置.
查看安装的版本,验证是否安装成功
命令如下:
swoole-cli -v
查看swoole的配置
查看swoole中的php相关配置
下面查询到的PHP扩展模块是swoole自带的.如果您希望增加扩展到swoole-cli,可以在swoole官方的github主页提交issue
安装完成之后体验一下编辑简单的Web服务器.
体验开发简单的web服务器
$http=newSwoole\Http\Server('127.0.0.1', 9991, SWOOLE_BASE); $http->on('start', function ($server) { echo"Swoole http server 已启动, 可访问 http://127.0.0.1:9501\n"; }); $http->on('request', function ($request, $response) { $response->header('Content-Type', 'text/plain'); $response->end('你好,这是我的第一个swoole http web服务器!'); }); $http->start();
on绑定swoole中的动作事件.start是启动一个http服务
运行我们写好的服务器:
swoole-cli webserver.php
接着按照命令行提示复制链接到浏览器访问:
接着来测试一下websocket,这也是我们平时做实时通讯常用的协议
服务端:ws.php
//创建WebSocket Server对象,监听0.0.0.0:9502端口$ws=newSwoole\WebSocket\Server('0.0.0.0', 9502); //监听WebSocket连接打开事件$ws->on('Open', function ($ws, $request) { $ws->push($request->fd, "你好\n".$request->fd); }); //监听WebSocket消息事件$ws->on('Message', function ($ws, $frame) { echo"消息: {$frame->data}\n"; $ws->push($frame->fd, "server: {$frame->data}"); }); //监听WebSocket连接关闭事件$ws->on('Close', function ($ws, $fd) { echo"client-{$fd} 已关闭\n"; }); $ws->start();
客户端:
<html><head><title>测试Websocket</title><style>body { margin: 0; } canvas { width: 100%; height: 100% } </style></head><body><script>varwsServer='ws://127.0.0.1:9502'; varwebsocket=newWebSocket(wsServer); websocket.onopen=function (evt) { console.log("Connected to WebSocket server."); }; websocket.onclose=function (evt) { console.log("已断开连接"); }; websocket.onmessage=function (evt) { console.log('接收的数据来自: '+evt.data); }; websocket.onerror=function (evt, e) { console.log('错误信息: '+evt.data); }; </script></body></html>
打开cmd执行:swoole-cli ws.php,看到如下图没有任何提示说明已经执行成功
然后在浏览访问:http://localhost/t3d/ws.html,这个是我的本地连接,需要根据你的实际情况访问,避免错误,务必把使用服务器来运行你的客户段代码,我一共打开两个访问窗口,效果如下:
总结
swoole的安装跟以前在windows上安装相比,简单了很多,基本无需任何安装操作,下载即可使用,只需配置环境变量.里面自带了php8.1以上的版本,无需自己安装,如果您需要添加扩展到swoole-cli,需要在GitHub上提交issue