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设计模式之调解者模式的深入解析
Jun 13 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
浅谈php冒泡排序
Dec 30 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
PHP实现简单计算器小程序
Aug 28 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 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的session cookie错误
2009/08/09 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php实现的mongodb操作类
2015/05/28 PHP
php表单处理操作
2017/11/16 PHP
理解JavaScript中的事件
2006/09/23 Javascript
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
js倒计时显示实例
2016/12/11 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
Python for循环与getitem的关系详解
2020/01/02 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
10张动图学会python循环与递归问题
2021/02/06 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
水利学院求职自荐书
2014/02/01 职场文书
医学生个人求职信范文
2014/02/07 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
安全教育片观后感
2015/06/17 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
个人工作决心书
2015/09/22 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL