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保持源文件名下载

Copy Highlighter-hljs
//都已安装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 开始安装

Copy Highlighter-hljs
$ 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命令设置一个密码

Copy Highlighter-hljs
;extension=xsl extension=swoole.so // 加到这里

然后,重启一下php,fpm有php7.1-fpm php7.2-fpm还有其他等等,要哪个呢,php -v看下版本,就用对应的版本就可以了,我当前是7.1,就用php7.1-fpm

Copy Highlighter-hljs
sudo service php7.1-fpm reload

然后,看一下效果,php -m看看有没有因为 swoole 是在 cli 模式下运行的,所以不能直接看 phpinfo() 中有没有

Copy Highlighter-hljs
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 文件,编写文件代码如下:

Copy Highlighter-hljs
<?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 服务器类似,只不过提供的是最简单的服务器监听和响应功能罢了,我们在终端启用这个服务器:

Copy Highlighter-hljs
php http_server.php

这样,表示服务器已经启动并且在监听请求了,到浏览器中访问 http://swoole.test:9501/http_server.php ,即可获取服务器输出响应内容:Hello World

TCP 服务器和客户端#

接下来,我们通过 Swoole 及其协程特性实现一个简单的 TCP 服务器和客户端,TCP 协议需要双方通过三次握手建立连接后才能进行通信,所以是一种可靠的协议,常见的聊天室应用就是基于 TCP 协议传输内容。我们还是在前面的测试目录下创建一个 tcp_server.php 文件用于编写 TCP 服务端代码:

Copy Highlighter-hljs
<?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 客户端代码:

Copy Highlighter-hljs
<?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 服务端

Copy Highlighter-hljs
php tcp_server.php

然后新开启一个终端窗口,启动 TCP 客户端

Copy Highlighter-hljs
php tcp_client.php

输出从 TCP 服务端接收到消息后 TCP 客户端退出,此时服务端也会打印连接建立和断开的日志消息:

Copy Highlighter-hljs
$ php tcp_server.php Client:Connect. Client: Close.

客户端退出后,服务端依然处理监听状态,等待下一个请求。

在 Homestead 环境下安装了 swoole, 并且安装了 Laravel-swoole 这个扩展包,运行 php artisan swoole:http start 显示把 swoole 的监听地址改为 0.0.0.0:9501 , 再把虚拟机端口 9501 转发出来访问就行了

posted @   caibaotimes  阅读(344)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
CONTENTS