windows在homestead中安装swoole与使用入门
PECL 的全称是 The PHP Extension Community Library ,是一个开放的并通过 PEAR(PHP Extension and Application Repository,PHP 扩展和应用仓库)打包格式来打包安装的 PHP扩展库仓库。通过 PEAR 的 Package Manager 的安装管理方式,可以对 PECL 模块进行下载和安装。
linux#
curl的参数中-o可以指定下载的文件名,-O保持源文件名下载
//都已安装php为前提
curl -o go-pear.php https://pear.php.net/go-pear.phar
php go-pear.php
pecl channel-update pecl.php.net
pecl install swoole
过程
将go-pear.phar放在待安装目录下(我的PHP文件夹位置:D:\phpstudy_pro\Extensions\php\php7.3.4nts\pear),在PHP文件夹中新建了一个pear文件夹,然后把go-pear.phar放进去。
注意事项:第一个一定是选择 local。
第一次执行的时候一定要指定 php的路径,输入13弹出对话框选择PHP的目录。
之后直接按 Enter 继续。完成
homestead安装#
进入homestead,查看版本 php -v 开始安装
$ sudo pecl channel-update pecl.php.net
$ sudo pecl install swoole
安装的时候会问你yes/no之类的选项,全部enter下去
看到有success 安装完成,并且上面提示了,你应该添加 extension=swoole.so 到php.ini文件,php.ini文件在哪呢,用这条命令就可以了php -i|grep php.ini
vim编辑一下 /etc/php/7.1/cli/php.ini
注意:编辑php.ini或者切换php版本的时候使用sudo或者切换到root账号 密码也是root,不知道密码可以 输入sudo passwd root命令设置一个密码
;extension=xsl
extension=swoole.so // 加到这里
然后,重启一下php,fpm有php7.1-fpm php7.2-fpm还有其他等等,要哪个呢,php -v看下版本,就用对应的版本就可以了,我当前是7.1,就用php7.1-fpm
sudo service php7.1-fpm reload
然后,看一下效果,php -m看看有没有因为 swoole 是在 cli 模式下运行的,所以不能直接看 phpinfo() 中有没有
php -m |grep swoole
查看一下php extension目录,执行php-config或者直接php-config --extension-dir 再看php -i|grep extension
测试 Swoole#
下面我们基于 Swoole 编写两个简单的功能来测试 Swoole 是否可以正常工作。
HTTP 服务器#
首先我们通过 Swoole 编写一个简单的 HTTP 服务器,在测试目录下创建一个 http_server.php 文件,编写文件代码如下:
<?php
// 表明服务器启动后监听本地 9051 端口
// $server = new Server("127.0.0.1", 9503);
$server = new swoole_http_server('http://swoole.test', 9501);
// 服务器启动时返回响应
$server->on("start", function ($server) {
echo "Swoole http server is started at http://127.0.0.1:9501\n";
});
// 向服务器发送请求时返回响应
// 可以获取请求参数,也可以设置响应头和响应内容
$server->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World\n");
});
// 启动 HTTP 服务器
$server->start();
这样,一个最基本的 HTTP 服务器就完成了,其工作原理和工业级的 Apache 和 Nginx 服务器类似,只不过提供的是最简单的服务器监听和响应功能罢了,我们在终端启用这个服务器:
php http_server.php
这样,表示服务器已经启动并且在监听请求了,到浏览器中访问 http://swoole.test:9501/http_server.php
,即可获取服务器输出响应内容:Hello World
TCP 服务器和客户端#
接下来,我们通过 Swoole 及其协程特性实现一个简单的 TCP 服务器和客户端,TCP 协议需要双方通过三次握手建立连接后才能进行通信,所以是一种可靠的协议,常见的聊天室应用就是基于 TCP 协议传输内容。我们还是在前面的测试目录下创建一个 tcp_server.php 文件用于编写 TCP 服务端代码:
<?php
namespace Swoole;
// 监听本地 9503 端口,等待客户端请求
// $server = new Server("127.0.0.1", 9503);
$server = new Server("0.0.0.0", 9503);
// 建立连接时输出
$server->on('connect', function ($serv, $fd){
echo "Client:Connect.\n";
});
// 接收消息时返回内容
$server->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, 'Swoole: '.$data);
$serv->close($fd);
});
// 连接关闭时输出
$server->on('close', function ($serv, $fd) {
echo "Client: Close.\n";
});
// 启动 TCP 服务器
$server->start();
然后在该目录下创建一个 tcp_client.php 文件用于编写 TCP 客户端代码:
<?php
namespace Swoole;
// Swoole4以后通过协程来实现异步通信
go(function () {
$client = new Coroutine\Client(SWOOLE_SOCK_TCP);
// 尝试与指定 TCP 服务端建立连接(IP和端口号需要与服务端保持一致,超时时间为0.5秒)
if ($client->connect("127.0.0.1", 9503, 0.5)) {
// 建立连接后发送内容
$client->send("hello world\n");
// 打印接收到的消息
echo $client->recv();
// 关闭连接
$client->close();
} else {
echo "connect failed.";
}
});
这样,一个最基本的 TCP 服务端和客户端程序就编写完成了,在终端先启动 TCP 服务端:
php tcp_server.php
然后新开启一个终端窗口,启动 TCP 客户端:
php tcp_client.php
输出从 TCP 服务端接收到消息后 TCP 客户端退出,此时服务端也会打印连接建立和断开的日志消息:
$ php tcp_server.php
Client:Connect.
Client: Close.
客户端退出后,服务端依然处理监听状态,等待下一个请求。
在 Homestead 环境下安装了 swoole, 并且安装了 Laravel-swoole 这个扩展包,运行 php artisan swoole:http start 显示把 swoole 的监听地址改为 0.0.0.0:9501 , 再把虚拟机端口 9501 转发出来访问就行了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?