php基于 swoole 实现的异步处理任务功能示例


Posted in PHP onAugust 13, 2019

本文实例讲述了php基于 swoole 实现的异步处理任务功能。分享给大家供大家参考,具体如下:

安装swoole:

下载官方swoole压缩包,解压进入目录

$ cd swoole             # 进入 swoole 目录
$ phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config  #注意查看服务器上是否有这个路径
$ make && make install

修改php.in文件

vi /usr/local/php/lib/php.ini

增加如下内容

extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/swoole.so" //版本不同路径可能不同

保存后重启php-fpm

$ /etc/init.d/php-fpm restart

php -m 命令查看是否添加成功 成功则会看到有swoole模块

$ php -m

服务端作为守护进程监控任务,新建server.php:

<?php
$serv = new Swoole\Server("127.0.0.1", 9502);
$serv->set(array('task_worker_num' => 4));
$serv->on('Receive', function($serv, $fd, $from_id, $data) {
  $task_id = $serv->task("Async");
  echo "Dispath AsyncTask: id=$task_id\n";
});
$serv->on('Task', function ($serv, $task_id, $from_id, $data) {
  echo "New AsyncTask[id=$task_id]".PHP_EOL;
  $serv->finish("$data -> OK");
});
$serv->on('Finish', function ($serv, $task_id, $data) {
  echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
}); 
$serv->start();

用命令行模式打开

php server.php

新建一个client.php

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on("connect", function(swoole_client $cli) {
  $cli->send("GET / HTTP/1.1\r\n\r\n");
});
$client->on("receive", function(swoole_client $cli, $data){
  echo "Receive: $data";
  $cli->send(str_repeat('A', 100)."\n");
  sleep(1);
});
$client->on("error", function(swoole_client $cli){
  echo "error\n";
});
$client->on("close", function(swoole_client $cli){
  echo "Connection close\n";
});
$client->connect('127.0.0.1', 9502);

打开一个新的窗口命令行执行

php client.php

执行完后会发现在server.php的窗口就会有信息输出

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
PHP 输出缓存详解
Jun 20 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
PHP批量采集下载美女图片的实现代码
Jun 03 PHP
php导入导出excel实例
Oct 25 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 #PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 #PHP
php实现的表单验证类完整示例
Aug 13 #PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 #PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 #PHP
Laravel如何同时连接多个数据库详解
Aug 13 #PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 #PHP
You might like
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
浅谈js中的bind
2019/03/18 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
python实现数通设备端口监控示例
2014/04/02 Python
Python比较两个图片相似度的方法
2015/03/13 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
理解Python中函数的参数
2015/04/27 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
深入了解Python在HDA中的应用
2019/09/05 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
网上签名寄语活动留言
2014/01/18 职场文书
单位成立周年感言
2014/01/26 职场文书
骨干教师个人总结
2015/02/11 职场文书
土建技术员岗位职责
2015/04/11 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
Python天气语音播报小助手
2021/09/25 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android