博主信息
博文 26
粉丝 1
评论 3
访问量 43122
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
swoole 安装后php进行异步执行任务!可以让你的爬虫爬的更快更多,让你的邮件发送的更多更快!
大瓶可乐
原创
1322人浏览过

服务器信息

1.宝塔面板
2.PHP版本7.2

1.安装swoole

1.1.下载swoole版本4.8.10 下载地址:https://gitee.com/swoole/swoole/tags
1.2.创建一个swoole目录然后传上去

1.3.解压后安装

进入解压后的swoole目录 自己的目录(/www/wwwroot/swoole/swoole-v4.8.10)
如果发现没有configure文件就使用phpize生成一个

  1. 配置 运行命令:./configure --with-php-config=/www/server/php/72/bin/php-config
  2. php-config自行查找:命令 find / -name "php-config"
  3. 编译 运行命令:make
  4. 安装 运行命令:make install

安装完毕

  1. Installing shared extensions: /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/
  2. Installing header files: /www/server/php/72/include/php/

进入 /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/ 发现里面有一个swoole.so的扩展

1.4.打开php.ini把扩展加进去

1.5重启php
  1. service php-fpm restart
1.6查看swoole扩展是否加入
  1. php -m

swoole安装完毕了!接下来我们开始进行用php进行测试!

2.php测试

2.1。创建一个服务server.php
  1. <?php
  2. //创建Server对象,监听 127.0.0.1:9501 端口
  3. // $server = new Swoole\Server('127.0.0.1', 9501); //只能本地链接
  4. $server = new Swoole\Server('0.0.0.0', 9501); // 0.0.0.0 表示所有人可以连接
  5. //监听连接进入事件
  6. $server->on('Connect', function ($server, $fd) {
  7. echo "Client: 用户{$fd}进入房间.\n";
  8. });
  9. //监听连接关闭事件
  10. $server->on('Close', function ($server, $fd) {
  11. echo "Client: 用户{$fd}退出房间.\n";
  12. });
  13. //启动服务器
  14. $server->start();
2.2.开启服务
  1. //进入你的服务目录开启服务
  2. php server.php

2.3.尝试使用telnet进行连接这个服务

重新开启一个ssh连接窗口进行测试

  1. //如果没有telnet 就进行安装:yum install telnet
  2. telnet 127.0.0.1 9501


服务端也同时进来了用户1

2.3.php异步请求执行任务,创建一个客户端的client.php
  1. <?php
  2. $client = new Swoole\Client(SWOOLE_SOCK_TCP);
  3. if (!$client->connect('127.0.0.1', 9501, -1)) {
  4. exit("connect failed. Error: {$client->errCode}\n");
  5. }
  6. $client->send(date('H:i:s')."hello world\n");
  7. echo "结束了";
  8. $client->close();
  9. ?>
2.4.然后我们server.php也改一下
  1. <?php
  2. //创建Server对象,监听 127.0.0.1:9501 端口
  3. // $server = new Swoole\Server('127.0.0.1', 9501); //只能本地链接
  4. $server = new Swoole\Server('0.0.0.0', 9501); // 0.0.0.0 表示所有人可以连接
  5. //监听连接进入事件
  6. $server->on('Connect', function ($server, $fd) {
  7. echo "Client: 用户{$fd}进入房间.\n";
  8. });
  9. //设置异步任务的工作进程数量
  10. $server->set([
  11. 'task_worker_num' => 4
  12. ]);
  13. //此回调函数在worker进程中执行
  14. $server->on('Receive', function($server, $fd, $reactor_id, $data) {
  15. //投递异步任务
  16. $task_id = $server->task($data);
  17. echo "启动一个异步任务: id={$task_id}\n";
  18. });
  19. //处理异步任务(此回调函数在task进程中执行)
  20. $server->on('Task', function ($server, $task_id, $reactor_id, $data) {
  21. echo "新建一个异步任务[id={$task_id}]".PHP_EOL;
  22. //返回任务执行的结果
  23. $server->finish("{$data} -> OK");
  24. });
  25. //处理异步任务的结果(此回调函数在worker进程中执行)
  26. $server->on('Finish', function ($serv, $task_id, $data) {
  27. for($i=0;$i<=10;$i++)
  28. {
  29. echo $i.":异步任务[{$task_id}] 完成: {$data}".PHP_EOL;
  30. sleep(1);
  31. }
  32. });
  33. //监听连接关闭事件
  34. $server->on('Close', function ($server, $fd) {
  35. echo "Client: 用户{$fd}退出房间.\n";
  36. });
  37. //启动服务器
  38. $server->start();
2.5.还是启动server.php:server这边我特地吧Task进行了十次循环每次暂停一秒,这样子我们可以看看是否异步成功!就算服务端还在继续执行,客户端已经结束了他的请求!

2.6.执行客户端client.php

2.7.这个时候客户端那边就开始执行了,为了查看是否是异步特地每次客户端请求增加了一个当前执行时间,看图片我们可以看到,他每一次任务都是混在一起执行的,而不是等一个结束后再执行下一个。说明异步成功了!

总结:

那么异步我们会用到哪些地方吗?
比如我们写爬虫的时候,不使用异步请求,你必须爬完一条数据后才能继续下一条数据进行采集!现在我们可以同时采集一页数据!更快更方便!
还有发送邮件的时候我们不需要一条条发!我们可以一次性发好几百条!不需要等待上一次发送结束了!
还有很多很多使用场景就看大家需求了!

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学