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中的类-什么叫类
Nov 20 PHP
PHP投票系统防刷票判断流程分析
Feb 04 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
php中require和require_once的区别说明
Feb 27 PHP
小谈php正则提取图片地址
Mar 27 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
php编程中echo用逗号和用点号连接的区别
Mar 26 PHP
thinkPHP中钩子的两种配置调用方法详解
Nov 11 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
PHP实现简易图形计算器
Aug 28 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
多人战的战术与战略
2020/03/04 星际争霸
使用PHP的日期与时间函数技巧
2008/04/24 PHP
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
Python上下文管理器全实例详解
2019/11/12 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
销售代表求职自荐信
2013/10/01 职场文书
中医专业应届生求职信
2013/11/17 职场文书
学习自我鉴定
2014/02/01 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
2015年人事科工作总结
2015/04/28 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
怒海潜将观后感
2015/06/11 职场文书
环保建议书作文300字
2015/09/14 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
python基础之停用词过滤详解
2021/04/21 Python
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫