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 相关文章推荐
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
php微信开发自定义菜单
Aug 27 PHP
功能强大的PHP发邮件类
Aug 29 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
Jun 16 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
php两点地理坐标距离的计算方法
Dec 29 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
PDO实现学生管理系统
Mar 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访问查询mysql数据的三种方法
2006/10/09 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
asp 的 分词实现代码
2007/05/24 Javascript
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
python中循环语句while用法实例
2015/05/16 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python实现移位加密和解密
2019/03/22 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
历史系自荐信范文
2013/12/24 职场文书
四好少年事迹材料
2014/01/12 职场文书
庆七一活动总结
2014/08/27 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS