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 相关文章推荐
Session的工作方式
Oct 09 PHP
PHP 代码规范小结
Mar 08 PHP
如何用php获取程序执行的时间
Jun 09 PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 PHP
基础的WordPress插件制作教程
Nov 24 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
Yii框架创建cronjob定时任务的方法分析
May 23 PHP
PHP程序员学习使用Swoole的理由
Jun 24 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 PHP
laravel开发环境homestead搭建过程详解
Jul 03 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循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
判断用户是否在线的代码
2011/03/05 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python字符串的方法与操作大全
2018/01/30 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
图书室管理制度
2014/01/19 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
分公司负责人任命书
2014/06/04 职场文书
校园文化标语
2014/06/18 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
聘用合同范本
2015/09/21 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
《海上日出》教学反思
2016/02/23 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
js作用域及作用域链工作引擎
2022/07/07 Javascript