1.宝塔面板
2.PHP版本7.2
进入解压后的swoole目录 自己的目录(/www/wwwroot/swoole/swoole-v4.8.10)
如果发现没有configure文件就使用phpize生成一个
配置 运行命令:./configure --with-php-config=/www/server/php/72/bin/php-config
(php-config自行查找:命令 find / -name "php-config")
编译 运行命令:make
安装 运行命令:make install
安装完毕
Installing shared extensions: /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/
Installing header files: /www/server/php/72/include/php/
进入 /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/ 发现里面有一个swoole.so的扩展
service php-fpm restart
php -m
swoole安装完毕了!接下来我们开始进行用php进行测试!
<?php
//创建Server对象,监听 127.0.0.1:9501 端口
// $server = new Swoole\Server('127.0.0.1', 9501); //只能本地链接
$server = new Swoole\Server('0.0.0.0', 9501); // 0.0.0.0 表示所有人可以连接
//监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: 用户{$fd}进入房间.\n";
});
//监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client: 用户{$fd}退出房间.\n";
});
//启动服务器
$server->start();
//进入你的服务目录开启服务
php server.php
重新开启一个ssh连接窗口进行测试
//如果没有telnet 就进行安装:yum install telnet
telnet 127.0.0.1 9501
服务端也同时进来了用户1
<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9501, -1)) {
exit("connect failed. Error: {$client->errCode}\n");
}
$client->send(date('H:i:s')."hello world\n");
echo "结束了";
$client->close();
?>
<?php
//创建Server对象,监听 127.0.0.1:9501 端口
// $server = new Swoole\Server('127.0.0.1', 9501); //只能本地链接
$server = new Swoole\Server('0.0.0.0', 9501); // 0.0.0.0 表示所有人可以连接
//监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: 用户{$fd}进入房间.\n";
});
//设置异步任务的工作进程数量
$server->set([
'task_worker_num' => 4
]);
//此回调函数在worker进程中执行
$server->on('Receive', function($server, $fd, $reactor_id, $data) {
//投递异步任务
$task_id = $server->task($data);
echo "启动一个异步任务: id={$task_id}\n";
});
//处理异步任务(此回调函数在task进程中执行)
$server->on('Task', function ($server, $task_id, $reactor_id, $data) {
echo "新建一个异步任务[id={$task_id}]".PHP_EOL;
//返回任务执行的结果
$server->finish("{$data} -> OK");
});
//处理异步任务的结果(此回调函数在worker进程中执行)
$server->on('Finish', function ($serv, $task_id, $data) {
for($i=0;$i<=10;$i++)
{
echo $i.":异步任务[{$task_id}] 完成: {$data}".PHP_EOL;
sleep(1);
}
});
//监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client: 用户{$fd}退出房间.\n";
});
//启动服务器
$server->start();
那么异步我们会用到哪些地方吗?
比如我们写爬虫的时候,不使用异步请求,你必须爬完一条数据后才能继续下一条数据进行采集!现在我们可以同时采集一页数据!更快更方便!
还有发送邮件的时候我们不需要一条条发!我们可以一次性发好几百条!不需要等待上一次发送结束了!
还有很多很多使用场景就看大家需求了!