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 相关文章推荐
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Jun 12 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
php依赖注入知识点详解
Sep 23 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
两个php日期控制类实例
2014/12/09 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
如何在Python对Excel进行读取
2020/06/04 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
python源文件的字符编码知识点详解
2021/03/04 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
自动化专业个人求职信范文
2013/11/29 职场文书
工程负责人任命书
2014/06/06 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
综治维稳工作汇报
2014/10/27 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL