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 相关文章推荐
PHP4之真OO
Oct 09 PHP
xml+php动态载入与分页
Oct 09 PHP
PHP令牌 Token改进版
Jul 18 PHP
深入解析phpCB批量转换的代码示例
Jun 27 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
PHP批量生成静态HTML的简单原理和方法
Apr 20 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
PHP CURL使用详解
Mar 21 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
Javascript 二维数组
2009/11/26 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
实例讲解python中的序列化知识点
2018/10/08 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
护理毕业生自荐信范文
2013/12/22 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
汉字听写大会观后感
2015/06/12 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL