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模板,主要想体现一下思路
Dec 25 PHP
yii框架builder、update、delete使用方法
Apr 30 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
php使用GeoIP库实例
Jun 27 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
PHP多态代码实例
Jun 26 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
php删除数组指定元素实现代码
May 03 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
May 31 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 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测试kafka项目示例
2020/02/06 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
理解javascript async的用法
2017/08/22 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
Python 数据处理库 pandas进阶教程
2018/04/21 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
社区党务公开实施方案
2014/03/18 职场文书
网络营销策划方案
2014/06/04 职场文书
食品安全标语
2014/06/07 职场文书
片区教研活动总结
2014/07/02 职场文书
农村门前三包责任书
2014/07/25 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers