Blogger Information
Blog 20
fans 1
comment 1
visits 30586
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
swoole 安装后php进行异步执行任务!可以让你的爬虫爬的更快更多,让你的邮件发送的更多更快!
大瓶可乐
Original
942 people have browsed it

服务器信息

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

总结:

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

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post