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生成带有雪花背景的验证码
Oct 09 PHP
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
php magic_quotes_gpc的一点认识与分析
Aug 18 PHP
php横向重复区域显示二法
Sep 25 PHP
PHP 远程关机实现代码
Nov 10 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
详解php实现页面静态化原理
Jun 21 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
php实现数字补零的方法总结
Sep 12 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高级对象构建 工厂模式的使用
2012/02/05 PHP
PHP 微信支付类 demo
2015/11/30 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
vue.js响应式原理解析与实现
2020/06/22 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
详解Python核心对象类型字符串
2018/02/11 Python
Python二维码生成识别实例详解
2019/07/16 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
茶叶生产计划书
2014/01/10 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
北京故宫导游词
2015/01/31 职场文书
数学教师个人总结
2015/02/06 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js