Swoole 扩展安装与使用入门
安装启用
可以直接使用宝塔安装Swoole扩展
或者 线上安装 linux为例:执行
pecl install swoole
,然后通过php -i | grep php.ini
定位 php.ini 文件所在位置,并打开该配置文件,在文件末尾追加如下内容:
[swoole]
extension=swoole.so
保存并退出,在终端运行 php -m
,如果看到扩展里包含 swoole,说明安装启用成功。
测试 Swoole 创建一个php文件 http_server.php
<?php
// 表明服务器启动后监听本地 9051 端口
$server = new swoole_http_server('127.0.0.1', 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();
终端启用这个 php http_server.php
如图:
表示服务器已经启动并且在监听请求了,到浏览器中访问 http://127.0.0.1:9501,即可获取服务器输出响应内容:Hello Word
TCP 服务器和客户端 通过 Swoole 及其协程特性实现一个简单的 TCP 服务器和客户端,TCP 协议需要双方通过三次握手建立连接后才能进行通信,所以是一种可靠的协议,常见的聊天室应用就是基于 TCP 协议传输内容。我们还是在前面的测试目录下创建一个 tcp_server.php 文件用于编写 TCP 服务端代码:
<?php
namespace Swoole;
// 监听本地 9503 端口,等待客户端请求
$server = new Server("127.0.0.1", 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 客户端退出,此时服务端也会打印连接建立和断开的日志消息:
客户端退出后,服务端依然处理监听状态,等待下一个请求。