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 相关文章推荐
文件上传的实现
Oct 09 PHP
PHP个人网站架设连环讲(二)
Oct 09 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
Jan 27 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
从wamp到xampp的升级之路
Apr 08 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
PHP实现创建以太坊钱包转账等功能
Apr 21 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
PHP生成带有雪花背景的验证码
2006/10/09 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
python按照多个条件排序的方法
2019/02/08 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
高中打架检讨书
2014/02/13 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
工作试用期自我评价
2015/03/10 职场文书
美术教师求职信范文
2015/03/20 职场文书
生产现场禁烟通知
2015/04/23 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书