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 28 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
PHP单例模式与工厂模式详解
Aug 29 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
如何选购合适的收音机
2021/03/01 无线电
咖啡的传说和历史
2021/03/03 新手入门
php UBB 解析实现代码
2011/11/27 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
大学生职业规划前言模板
2013/12/27 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
离婚协议书样本
2015/01/26 职场文书
放假通知范文
2015/04/14 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书